Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO et liaison de plusieurs ensembles de valeurs lors de l'insertion - récemment

En théorie, il peut sembler qu'une seule instruction soit plus efficace car vous évitez de faire plusieurs appels au serveur MySQL, mais la réalité est qu'il s'agit d'une micro-optimisation et que vous compliquez trop votre code pour pratiquement aucun avantage.

Ce qui est cool avec les instructions préparées, c'est qu'elles sont préparées une fois et peuvent être exécutées plusieurs fois. Cela vous évite déjà d'analyser l'instruction SQL plusieurs fois. Préparez simplement une instruction en dehors d'une boucle, puis exécutez-la à l'intérieur d'une boucle.

$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
    $stmt->execute($name);
}

Si vous encapsulez le tout dans une transaction comme votre bon sens l'a suggéré dans les commentaires, il n'y a pas de différence notable de performances par rapport à une seule grande déclaration.

$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();