理論的には、MySQLサーバーへの複数の呼び出しを回避するため、単一のステートメントの方が効率的であるように聞こえるかもしれませんが、実際には、これはマイクロ最適化であり、コードを複雑にしすぎてほとんどメリットがありません。
プリペアドステートメントの優れている点は、1回準備され、複数回実行できることです。これにより、SQLステートメントを複数回解析する手間が省けます。ループの外側でステートメントを準備し、ループの内側で実行するだけです。
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
$stmt->execute($name);
}
あなたの常識がコメントで示唆したように、トランザクションですべてをラップする場合、1つの大きなステートメントと比較してパフォーマンスに目立った違いはありません。
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO people (firstName, lastName) VALUES(?,?)');
$pdo->beginTransaction();
foreach ($names as $name) {
$stmt->execute($name);
}
$pdo->commit();