一次插入多行。如何缩短这个?

时间:2013-09-11 15:36:21

标签: php mysql pdo

我必须一次插入几行,每行都得到相同的值。有没有办法缩短查询?

$stmt = $db->prepare('
    INSERT INTO `tablename`
    (`value`) VALUES (?), (?), (?), (?), (?)
');
$stmt->execute(array($value, $value, $value, $value, $value));

4 个答案:

答案 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));
}

以编程方式控制比单个查询多行插入更容易。