首页 > 数据库 > mysql教程 > 尽管参数计数匹配,为什么我的多重插入查询会抛出'无效参数号”错误?

尽管参数计数匹配,为什么我的多重插入查询会抛出'无效参数号”错误?

Barbara Streisand
发布: 2024-12-28 01:46:09
原创
166 人浏览过

Why Does My Multiple Insert Query Throw an

错误处理:多重插入查询中的“参数编号无效”

尝试执行多重插入查询时,确保参数值的数量与查询本身中占位符的数量相匹配。然而,尽管在执行查询之前确认 count($matches) 和 count($values) 相等,但以下代码会遇到错误“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);
登录后复制

代码和错误消息之间的差异源于 $values 数组初始化中的潜在问题。 $values 可能已经包含一些数据,导致计数不匹配。为了防止这种情况,必须始终在循环之前初始化数组。

要解决此问题,请考虑以下修改后的代码:

$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);
登录后复制

此外,为了避免“参数编号无效”多个插入查询中出现错误,请确保用于重复键更新的列(在本例中为散列)已定义唯一索引。否则可能会导致意外行为和潜在错误。

以上是尽管参数计数匹配,为什么我的多重插入查询会抛出'无效参数号”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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