我必须一次插入几行,每一行都得到相同的值。有没有办法缩短该查询?
$stmt = $db->prepare('
INSERT INTO `tablename`
(`value`) VALUES (?), (?), (?), (?), (?)
');
$stmt->execute(array($value, $value, $value, $value, $value));
$count = 5;
$value = 'HELLO';
$stmt = $db->prepare('
INSERT INTO `tablename`
(`value`) VALUES ' . implode(', ', array_fill(0, $count, '(?)')) );
$stmt->execute(array_fill(0, $count, $value));
虽然我不确定用相同的值填充表格的 n 行是否有多大价值
如果您可以将值放在另一个表中,则可以重复INSERT
这些:
CREATE TEMPORARY TABLE _values (v VARCHAR(255));
INSERT INTO _values ("x","x","x");
/* Repeat as necessary */
INSERT INTO tablename (`value`) SELECT v FROM _values;
看到您正在使用准备好的语句,为什么不在循环上调用 execute() ?:
$rowsToInsert = 5;
$stmt = $db->prepare('INSERT INTO `tablename` (`value`) VALUES (?)');
for($i = 0; $i < $rowsToInsert; $i++) {
$stmt->execute(array($value));
}
以编程方式控制肯定比单个查询多行插入要容易得多。
我不确定以下是否有效。
但至少它为您提供了一次多次插入的语法。
$stmt = $db->prepare('
INSERT INTO example
(example_id, name, value, other_value)
VALUES
(?, ?, ?, ?),
(?, ?, ?, ?),
(?, ?, ?, ?),
(?, ?, ?, ?);
');
$stmt->execute(
array(
$value, $value, $value, $value, $value,
$value, $value, $value, $value, $value,
$value, $value, $value, $value, $value,
$value, $value, $value, $value, $value
));