對於給定的代碼,我收到以下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