php - 在准备好的语句中使用占位符时出错

标签 php mysql pdo

我在使用下面的代码时遇到了这个错误(一切都在 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

中执行两个绑定(bind)值
$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/

相关文章:

mysql - 替换每行中的第 11 个字符

php - PDO::__ construct(sqlite)尝试/捕获使用

php - PDO 准备好的语句不执行任何操作

php - Laravel - php artisan migrate - SQLSTATE[HY000] [14] 无法打开数据库文件

php - 绕过 Gmail 的垃圾邮件过滤器(从共享主机使用 PHP 发送的邮件)

mysql - 缺少 mysql 查询的一些结果

MySQL 与 PDO

php - 需要借助 xsl/xslt 将重复的 XML 节点放在单独的节点中

php - 要捕获的动态正则表达式

mysql - 带 IF 语句的 for 循环不会退出