php - 使用 PDO、准备好的语句和用 bindParam 替换标记来更新 MySQL;收到 'variables don' t 匹配 token 错误

标签 php mysql sql arrays pdo

我正在尝试更新 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);

然后,我将准备好的语句中的每个标记/占位符绑定(bind)到要使用另一个循环插入的值:

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

$stmt->execute();         

其中 $values 是数据库中的列标题数组(因此 ':$value' 是与其对应的一组标记名称),$variables 是包含要存储的数据的变量数组。

当我运行此程序时,出现错误:

Error: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

但是正如你所看到的,我是从数组中形成它们的 - 我已经对数组进行了计数以确保元素 1:1 匹配,并且它们确实如此:

仅供引用:

$count1 = count($values);
$count2 = count($variables);

echo $count1;
echo $count2;

给出: 7575

(它们都有 75 个元素)

最佳答案

单引号不会插入变量。

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

应该是

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

关于php - 使用 PDO、准备好的语句和用 bindParam 替换标记来更新 MySQL;收到 'variables don' t 匹配 token 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059826/

相关文章:

php - 尽管 magic_quotes 已关闭,但仍会转义字符串?

mysql - 使用街道地址作为主键的最佳实践是什么?

SQL 服务器 2008 : N small databases VS 1 database with N schemas

java - ArrayList 类在离开 while 循环后丢失变量

php - 如何使用 Symfony 4 表单更新唯一实体字段

php - 如何在sql中一起使用like和between?

php - 通知: Unidentified Index: QNo in C:\\xampp\htdocs\,

sql - 如何将表连接到自身并在 SQL 中选择最大值

php - 使用ajax向yii2中的表单添加更多字段

php - 使用日期MySQL触发器自动删除数据