一度に数行を挿入する必要があり、すべての行が同じ値になります。そのクエリを短縮する方法はありますか?
$stmt = $db->prepare('
INSERT INTO `tablename`
(`value`) VALUES (?), (?), (?), (?), (?)
');
$stmt->execute(array($value, $value, $value, $value, $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
));
準備済みステートメントを使用しているので、ループで execute() を呼び出してみませんか?:
$rowsToInsert = 5;
$stmt = $db->prepare('INSERT INTO `tablename` (`value`) VALUES (?)');
for($i = 0; $i < $rowsToInsert; $i++) {
$stmt->execute(array($value));
}
単一クエリの複数行挿入よりも、プログラムで制御する方がはるかに簡単です。