I teorin kan det låta som att ett enstaka uttalande är mer effektivt eftersom du undviker att göra flera anrop till MySQL-servern, men verkligheten är att detta är en mikrooptimering och du överkomplicerar din kod till knappt någon nytta.
Det coola med förberedda uttalanden är att de förbereds en gång och kan köras flera gånger. Detta sparar dig redan från att analysera SQL-satsen flera gånger. Förbered helt enkelt en sats utanför en loop och kör den sedan i en loop.
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
$stmt->execute($name);
}
Om du slår in det hela i en transaktion som ditt sunda förnuft föreslog i kommentarerna så finns det ingen märkbar skillnad i prestanda jämfört med ett stort uttalande.
$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();