0

我正在尝试更新我的 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' 是一组与其对应的标记名称),$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 个元素)

4

1 回答 1

2

单引号不插入变量。

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

应该

$stmt->bindParam(":$value", $variable);
于 2012-10-25T00:20:24.573 回答