首页 > 后端开发 > php教程 > 为什么我的多重插入查询失败并显示'SQLSTATE[HY093]:参数号无效”?

为什么我的多重插入查询失败并显示'SQLSTATE[HY093]:参数号无效”?

Susan Sarandon
发布: 2024-12-05 02:09:13
原创
204 人浏览过

Why Does My Multiple Insert Query Fail with

“准备多重插入查询时出错”

尝试执行多重插入查询时,您可能会遇到类似“SQLSTATE[HY093]:无效参数”的错误编号:参数未定义”。当查询中占位符值 (?) 的数量与传入参数的数量不匹配时,会发生此错误。

请考虑以下代码示例:

// BUILD VALUES
$count = count($matches);
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}
// INSERT INTO DATABASE
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);
登录后复制

在此场景中,您可能会感到困惑,因为在调用execute之前count($matches)等于count($values)。但是,错误仍然存​​在。

潜在问题:
当 $values 在使用占位符值填充之前使用现有值进行初始化时,会出现潜在问题。因此,会出现计数不匹配的情况。

解决方案:
要解决此错误,请确保在循环中填充 $values 之前先初始化一个空数组。这保证了占位符值的数量与插入的数据点的数量相匹配。

其他注意事项:

  • 验证哈希列是否具有唯一索引以防止重复条目。
  • 使用准备好的语句($stmt)而不是准备和执行方法。

修订后的代码示例:

$matches = array('1');
$count = count($matches);
$values = [];
for($i = 0; $i < $count; ++$i) {
    $values[] = '(?)';
}

// INSERT INTO DATABASE
$sql = "INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash=values(hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute($matches);
登录后复制

以上是为什么我的多重插入查询失败并显示'SQLSTATE[HY093]:参数号无效”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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