0

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

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

4 回答 4

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 行是否有多大价值

于 2013-09-11T15:45:29.437 回答
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;
于 2013-09-11T15:45:18.810 回答
0

看到您正在使用准备好的语句,为什么不在循环上调用 execute() ?:

$rowsToInsert = 5;

$stmt = $db->prepare('INSERT INTO `tablename` (`value`) VALUES (?)');
for($i = 0; $i < $rowsToInsert; $i++) {
    $stmt->execute(array($value));
}

以编程方式控制肯定比单个查询多行插入要容易得多。

于 2013-09-11T15:42:09.803 回答
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
));
于 2013-09-11T15:38:27.513 回答