SQLSTATE[HY093]错误:基础数据库插入绑定变量与令牌不匹配
解决PDO插入时的HY093参数不匹配错误
嘿,这个问题其实一眼就能揪出原因!你碰到的SQLSTATE[HY093]错误核心就是绑定的变量数量和SQL语句里的占位符数量不匹配。
咱们对着你的代码仔细核对下:
- 你的SQL插入语句里,明确定义了5个命名占位符:
:name,:surname,:username,:password,:date_of_birth - 但在
execute()方法传入的关联数组里,你只传了4个键值对——完全漏掉了:password对应的参数!
PDO找不到:password这个占位符对应的绑定值,自然就抛出了参数数量不匹配的警告。
修正后的代码
只需要在绑定数组里补上:password的参数即可:
$query = $pdo->prepare("INSERT into `students`(`name`, `surname`, `username`, `password`, `date_of_birth`) VALUES(:name, :surname, :username, :password, :date_of_birth)"); $query->execute(array( ":name" => $name, ":surname" => $surname, ":username" => $username, ":password" => $password, // 补上这个漏掉的参数 ":date_of_birth" => $date_of_birth ));
小排查技巧
以后再遇到这类错误,最快的验证方式就是:
- 数一遍SQL里的占位符总数
- 再数一遍绑定数组里的键名总数
- 同时检查每个键名和占位符的拼写(包括大小写,PDO支持不带冒号的键名,但统一写法能减少出错概率)
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

