对于给定的代码,我收到以下SQL错误。PDO绑定问题
您的SQL语法错误;检查coresponds 你的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,它只是输出(“更新用户设置的角色=:角色其中USER_ID IN(100)”),剧本的作品。
这是一个MySQL错误,在绑定之前。 'echo $ SQL'来查看构造语句的样子。它会有一些奇怪的东西导致这个模棱两可的错误信息。 –
您是否试过回应您的查询?它是什么样子的? – andrewsi
回显的查询是有效的SQL(在构建之后),如果我将查询复制到Workbench /手动执行它,它将起作用。它看起来像这样:“更新用户SET角色=:角色WHERE user_id IN(100)” – syl