// 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);
上面的代码失败并出现以下错误
SQLSTATE[HY093]:参数号无效:参数未定义
虽然当 count($matches) == count($values)
在执行之前被调用?
这是怎么回事?
最佳答案
您收到此错误是因为 $values
和 $matches
中的元素数量不匹配。
如果 $values
和 $matches
不包含相同数量的元素,则插入将失败,因为查询需要 X 参数但它正在接收 Y 数据$matches
。在您的情况下, $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 - 准备多插入查询时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10966251/