我正在尝试更新我的 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 个元素)