На теория може да звучи, че едно изявление е по-ефективно, защото избягвате да извършвате множество извиквания към MySQL сървъра, но реалността е, че това е микрооптимизация и усложнявате прекалено кода си без никаква полза.
Страхотното при подготвените оператори е, че се подготвят веднъж и могат да бъдат изпълнени няколко пъти. Това вече ви спестява многократно анализиране на SQL израза. Просто подгответе изявление извън цикъл и след това го изпълнете вътре в цикъл.
$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
$stmt->execute($name);
}
Ако обвиете цялото нещо в транзакция, както вашият здрав разум предложи в коментарите, тогава няма забележима разлика в производителността в сравнение с едно голямо изявление.
$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();