php - 准备多插入查询时出错

标签 php mysql pdo

// 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/

相关文章:

当插入到主数据库上有外键的两个数据库时,MySql 事务锁定超时(1205)

mysql - 在 mysql 中通过 select 声明和使用变量

php - 使用下拉菜单更新数据库而不使用提交按钮

php - 使用 sqlite 的 PDO 不会插入任何内容

php - PDO 更新 mysql 字段

php - 通过PHP上传多个文件并将信息发布到MYSQL数据库

javascript - 使用 AJAX 将数据库记录加载到表中?

php - MySQL PDO 不在查询中

php - 通过 ssh 和 exec 命令在 php 代码中进入特权执行模式

php - 我想在单击客户姓名表单下拉列表时显示数据,它将仅显示该客户的消息和输入日期