You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO执行SQL报SQLSTATE[HY093]错误:绑定变量数与标记数不匹配

问题原因

你混用了SQL字符串拼接和PDO参数绑定两种数据库操作写法:

  • 你构造的$sql语句直接把$email、$key、$expDate三个变量的值拼接进了SQL文本,没有预留:email、:key、:expDate这类命名占位符
  • 后续代码又调用了3次bindParam()方法绑定参数,PDO在执行时找不到对应的参数点位,因此抛出「绑定变量数量与标记数量不匹配」的报错

相同查询在其他服务器可正常运行,大概率是其他环境下的代码没有出现这种写法混用的问题,或者对应环境的PDO配置做了特殊兼容。

修复方案

把拼接变量的SQL语句改为使用命名占位符的写法即可,既匹配后续的参数绑定逻辑,也能避免SQL注入风险:

$expFormat = mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 1, date("Y"));
$expDate = date("Y-m-d H:i:s", $expFormat);
$key = md5(time());
$addKey = substr(md5(uniqid(rand(), 1)), 3, 10);
$key = $key . $addKey;
// 修改SQL为占位符写法,不要直接拼接变量
$sql="INSERT INTO `password_reset_temp` (`email`, `key`, `expDate`) VALUES (:email, :key, :expDate);";
$query = $dbh->prepare($sql);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->bindParam(':key',$key,PDO::PARAM_STR);
$query->bindParam(':expDate',$expDate,PDO::PARAM_STR);
$query->execute();

内容的提问来源于stack exchange,提问作者kil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:21:00