插入多条记录时排查 SQL 错误
在最近的开发工作中,设计了一个代码片段,用于使用PDO 准备好的语句遇到错误:
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
尽管表面上等效要插入的值的数量 (count($matches)) 和占位符的数量 (count($values)),查询执行失败。
根本原因
该错误源于对 $values 数组初始化的误解。与最初包含空数组的 $matches 不同,$values 填充了未初始化的值。因此,$values 包含的计数大于 $matches,导致参数不匹配错误。
解决方案
要解决此问题,显式地解决此问题至关重要在进入循环之前将 $values 初始化为空数组:
$matches = array('1'); $count = count($matches); $values = []; for($i = 0; $i < $count; ++$i) { $values[] = '(?)'; }
通过此修改,$matches 的计数和$values 将匹配,从而允许查询成功执行。
其他注意事项
此外,建议确保目标表中的哈希列具有唯一索引来处理重复键冲突。这可以通过在 INSERT 语句后添加以下行来实现:
ON DUPLICATE KEY UPDATE hash=values(hash)
以上是为什么我的 PDO 准备语句在插入多条记录时失败并显示'SQLSTATE[HY093]:无效的参数号”?的详细内容。更多信息请关注PHP中文网其他相关文章!