我必须一次插入几行,每行都得到相同的值。有没有办法缩短查询?
$stmt = $db->prepare('
INSERT INTO `tablename`
(`value`) VALUES (?), (?), (?), (?), (?)
');
$stmt->execute(array($value, $value, $value, $value, $value));
答案 0 :(得分:2)
$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行中看到了多少价值
答案 1 :(得分:1)
如果您可以将值放在另一个表中,则可以重复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;
答案 2 :(得分:0)
我不确定以下是否有效 但至少它为您提供了一次插入几种语法的语法。
$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
));
答案 3 :(得分:0)
看到你正在使用预准备语句,为什么不在循环上调用execute()?:
$rowsToInsert = 5;
$stmt = $db->prepare('INSERT INTO `tablename` (`value`) VALUES (?)');
for($i = 0; $i < $rowsToInsert; $i++) {
$stmt->execute(array($value));
}
以编程方式控制比单个查询多行插入更容易。