我在使用以下代码时遇到此错误(所有内容都在 try catch 块中):
SQLSTATE[HY093]:参数编号无效:绑定变量数 与令牌数量不匹配
$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 替换为数字时,它有效。我很高兴能得到一些帮助!:)
问题
目前,您执行两次,每次绑定一个参数。
溶液
您希望先绑定参数然后执行,或者在绑定两个参数的情况下执行。
在函数中使用两个绑定值执行PDOStatement::execute()
$update->execute([":item_q" => $item_q, ":item_num" => $item_no]);
使用PDOStatement::bindParam()
函数绑定参数后执行
$update->bindParam(":item_q", $item_q, PDO::PARAM_INT);
$update->bindParam(":item_num", $item_no, PDO::PARAM_STR);
$update->execute();
问题在于两次执行语句。
$update->execute([':item_q' => $item_q]);
$update->execute([':item_no' => $item_no]);
将其合并为一个
$update->execute([':item_q' => $item_q,':item_no' => $item_no]);
试试这个,如果它不起作用,请告诉我
$update->execute([':item_q' => $item_q,':item_no' => $item_no]);