首页 >数据库 >mysql教程 >为什么我的多重插入查询返回'无效参数号”?

为什么我的多重插入查询返回'无效参数号”?

Susan Sarandon
Susan Sarandon原创
2024-12-13 18:14:10264浏览

Why Does My Multiple Insert Query Return

错误:多次插入查询中参数编号无效

尝试向数据库表中插入多条记录时,您可能会遇到“参数编号无效:参数未定义” 错误。当查询中指定的参数数量与作为输入提供的值的数量不匹配时,就会发生这种情况。

理解问题

在提供的代码片段中:

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

// Build query
$q = $this->dbc->prepare("INSERT INTO hashes (hash) VALUES " . implode(', ', $values) . " ON DUPLICATE KEY UPDATE hash = hash");
$q->execute($matches);

目标是使用准备好的语句将 $matches 中的值插入到哈希表中。但是,由于 $values 数组中的占位符参数 (?) 数量与 $matches 中的实际数据不对应而出现错误。

修复

要解决此问题,请确保以下:

  1. 初始化数组:始终在循环之前初始化 $values 数组以避免预先存在的值。
  2. 确认数据计数:验证 $values 中的元素数量是否等于 $matches 中的元素数量。如果没有,请调整循环或添加条件检查。
  3. 创建唯一索引:检查哈希列是否有唯一索引。这可以防止重复条目并确保插入或更新每个提供的值。
  4. 使用参数化语句:采用准备好的语句来防止 SQL 注入和参数绑定问题。

示例

$matches = array('1');
$values = [];
$count = count($matches);

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

// Insert query with named parameters (:hash)
$sql = "INSERT INTO hashes (hash) VALUES (:hash) ON DUPLICATE KEY UPDATE hash = VALUES(:hash)";
$stmt = $dbh->prepare($sql);
$data = $stmt->execute([':hash' => $matches]);

以上是为什么我的多重插入查询返回'无效参数号”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn