Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO更新MySQL,准备语句并用bindParam替换令牌;获得';变量不';t匹配代币';错误_Php_Mysql_Sql_Arrays_Pdo - Fatal编程技术网

Php 使用PDO更新MySQL,准备语句并用bindParam替换令牌;获得';变量不';t匹配代币';错误

Php 使用PDO更新MySQL,准备语句并用bindParam替换令牌;获得';变量不';t匹配代币';错误,php,mysql,sql,arrays,pdo,Php,Mysql,Sql,Arrays,Pdo,我正在尝试更新MySQL数据库中的记录 我使用数组/循环构建准备好的语句: $sql = "UPDATE table01 SET "; foreach($values as $value) { $sql .="$value = :$value, "; } $sql = rtrim($sql,', '); $sql .=" WHERE id = '$id'"; 然后我准备这份声明: tr

我正在尝试更新MySQL数据库中的记录

我使用数组/循环构建准备好的语句:

$sql =  "UPDATE table01 SET ";  
        foreach($values as $value)
        {
        $sql .="$value = :$value, ";
        }
        $sql = rtrim($sql,', ');    
        $sql .=" WHERE id = '$id'";
然后我准备这份声明:

try 
{
$pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare($sql);
然后,我使用另一个循环将准备好的语句中的每个标记/占位符绑定到要插入的值:

foreach(array_combine($values, $variables) as $value=>$variable)
{
$stmt->bindParam(':$value', $variable);
}

$stmt->execute();         
其中,$values是数据库中列标题的数组(因此“:$value”是对应于它们的一组标记名),而$values是包含要存储的数据的变量数组

当我运行此操作时,会出现以下错误:

Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
但正如你所看到的,我是从数组中生成它们的——我对数组进行了计数,以确保元素匹配1:1,它们确实:

供参考:

给出: 7575


(它们都有75个元素)

单引号不插入变量

$stmt->bindParam(':$value', $variable);
应该是

$stmt->bindParam(":$value", $variable);

哇,谢谢,我想每天都是上学的日子!是的,在我学习bindParam的例子中,他们没有同时使用变量,这是有道理的。谢谢@JohnWoo,这不是特定于准备好的声明;只是如果您没有正确处理变量,那么您尝试绑定的变量的名称将不匹配。你可以使用任何类型的报价。不用说@ElYobo这解决了我的问题!我会在8分钟内接受它,当它让我:)你很快<代码>+1哎呀,我错了。我想我现在需要睡觉了:D
$stmt->bindParam(":$value", $variable);