En teoría, podría parecer que una sola declaración es más eficiente porque evita realizar varias llamadas al servidor MySQL, pero la realidad es que se trata de una microoptimización y está complicando demasiado su código sin apenas obtener ningún beneficio.
Lo bueno de las declaraciones preparadas es que se prepara una vez y se puede ejecutar varias veces. Esto ya le ahorra analizar la declaración SQL varias veces. Simplemente prepare una declaración fuera de un ciclo y luego ejecútela dentro de 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);
}
Si envuelve todo en una transacción como sugiere Your Common Sense en los comentarios, entonces no hay una diferencia notable en el rendimiento en comparación con una gran declaración.
$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();