对于给定的代码,我收到以下 SQL 错误。
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法
编码:
$set_query = "";
foreach ($passed_columns as $c)
{
$set_query .= $c . " = " . ':' . $c . ',';
}
$p = strlen($set_query);
$set_query[$p-1] = "";
$SQL = 'UPDATE users SET ' . $set_query . ' WHERE user_id IN (' . implode(",", $_POST['user_id']) . ')';
$stmt = $dbh->prepare($SQL);
foreach($_POST['cols'] as $key => $val)
{
$stmt->bindValue(':' . $key, $val);
}
if (!$stmt->execute()) {
die(print_r($stmt->errorInfo()));
}
$_POST['cols'] 包含一个键值数组(column_name => 新列值)。$passed_columns 仅包含与 $_POST['cols'] 中的键匹配的列名数组
我认为这个问题与价值观的绑定方式有关。如果我回显 $SQL 变量,则输出是有效的 SQL(带有我正在测试的值)。
但奇怪的是,如果我手动将 $SQL 设置为它只是输出的有效 SQL(“UPDATE users SET role = :role WHERE user_id IN (100)”),脚本就可以工作。