尝试执行多重插入查询时,您可能会遇到类似“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 之前先初始化一个空数组。这保证了占位符值的数量与插入的数据点的数量相匹配。
其他注意事项:
修订后的代码示例:
$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中文网其他相关文章!