【发布时间】:2012-06-13 12:58:08
【问题描述】:
// 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)?
这是怎么回事?
【问题讨论】:
-
您是否尝试过传递 array_values($matches)?
-
为什么是
ON DUPLICATE KEY UPDATE hash = hash?也可以INSERT IGNORE ...。你的意思是UPDATE hash = VALUES(hash)? -
$values数组在循环之前是否已经包含某些内容?另外,为什么不准备一个INSERT INTO hashes (hash) VALUES (?)并多次执行呢? -
@eggyal 我正在插入大约 1000 个值,并且多次插入的速度大约快 10 倍 :)
-
@Griff:在多次执行准备好的语句的情况下是否也是如此?我自己从未对其进行基准测试,但一直认为性能影响可以忽略不计......