In teoria, potrebbe sembrare che una singola istruzione sia più efficiente perché eviti di effettuare più chiamate al server MySQL, ma la realtà è che si tratta di una micro-ottimizzazione e stai complicando eccessivamente il tuo codice con a malapena alcun vantaggio.
La cosa interessante delle istruzioni preparate è che vengono preparate una volta e possono essere eseguite più volte. Ciò ti consente già di risparmiare l'analisi dell'istruzione SQL più volte. Prepara semplicemente un'istruzione al di fuori di un ciclo e poi eseguila all'interno di un ciclo.
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
$stmt->execute($name);
}
Se avvolgi il tutto in una transazione come suggerito dal tuo buon senso nei commenti, non ci sono differenze evidenti nelle prestazioni rispetto a una grande affermazione.
$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();