使用下面的代码时出现此错误(所有内容都在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时,它可以工作。我很高兴能得到一些帮助! :)
答案 0 :(得分:5)
目前,您每次都使用一个参数绑定执行两次。
您希望先绑定参数然后执行,或者使用两个参数绑定执行。
使用 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();
答案 1 :(得分:4)
问题在于执行你的陈述两次。
$update->execute([':item_q' => $item_q]);
$update->execute([':item_no' => $item_no]);
将其合并为一个
$update->execute([':item_q' => $item_q,':item_no' => $item_no]);
答案 2 :(得分:0)
试试这个并告诉我它是否无效
$update->execute([':item_q' => $item_q,':item_no' => $item_no]);