错误处理:多重插入查询中的“参数编号无效”
尝试执行多重插入查询时,确保参数值的数量与查询本身中占位符的数量相匹配。然而,尽管在执行查询之前确认 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中文网其他相关文章!