首页 > 数据库 > mysql教程 > 为什么我的 PDO 准备语句在插入多条记录时失败并显示'SQLSTATE[HY093]:无效的参数号”?

为什么我的 PDO 准备语句在插入多条记录时失败并显示'SQLSTATE[HY093]:无效的参数号”?

Mary-Kate Olsen
发布: 2024-12-13 00:06:16
原创
371 人浏览过

Why Does My PDO Prepared Statement Fail with

插入多条记录时排查 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板