我在使用下面的代码时遇到了这个错误(一切都在 try catch block 中):
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
$item_q = 4;
$item_no = 12;
$update = $db->prepare("UPDATE stock
SET quantity = quantity - :item_q
WHERE item_number = :item_no");
$update->execute([':item_q' => $item_q]);
$update->execute([':item_no' => $item_no]);
问题出在 :item_q 上,我不知道它是什么。当我用数字替换 sql 查询中的 :item_q 时,它起作用了。我很高兴能得到一些帮助! :)
最佳答案
问题
目前您正在执行两次,每次都绑定(bind)一个参数。
解决方案
你想要么先绑定(bind)参数然后执行,要么在两个参数都绑定(bind)的情况下执行。
在 PDOStatement::execute()
function
$update->execute([":item_q" => $item_q, ":item_num" => $item_no]);
绑定(bind)参数后执行 PDOStatement::bindParam()
function
$update->bindParam(":item_q", $item_q, PDO::PARAM_INT);
$update->bindParam(":item_num", $item_no, PDO::PARAM_STR);
$update->execute();
关于php - 在准备好的语句中使用占位符时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911459/