Maison > base de données > tutoriel mysql > Quelle approche est la meilleure pour insérer plusieurs lignes dans PHP PDO MySQL ?

Quelle approche est la meilleure pour insérer plusieurs lignes dans PHP PDO MySQL ?

Susan Sarandon
Libérer: 2024-11-13 11:16:02
original
1028 Les gens l'ont consulté

Which Approach is Better for Inserting Multiple Rows in PHP PDO MySQL?

Insertion de plusieurs lignes dans PHP PDO MySQL : comparaison de code et optimisation

Lorsque vous devez insérer plusieurs lignes dans une table MySQL à l'aide PHP PDO, les développeurs peuvent rencontrer deux approches principales.

Approche 1 :

$stmt = $db->prepare($sql);

foreach($rows as $row){
  $stmt->execute($row);
}
Copier après la connexion

Approche 2 :

$sql = "insert into `table_name` (col1, col2, col3) values ";
$sql .= //not sure the best way to concatenate all the values, use implode?
$db->prepare($sql)->execute();
Copier après la connexion

Performance et sécurité du code :

Les deux les approches sont viables, mais elles diffèrent en termes de vitesse d'exécution et de sécurité.

Approche 1 :

  • Avantages : Simple et facile à mettre en œuvre.
  • Inconvénients : Peut être lent pour les grands ensembles de données en raison de exécutions séparées pour chaque ligne.

Approche 2 :

  • Avantages : Plus rapide que l'approche 1 pour les grands ensembles de données car elle effectue une insertion par lots.
  • Inconvénients : Nécessite une concaténation minutieuse des valeurs, augmentant le risque d'attaques par injection SQL (utilisez des requêtes paramétrées pour prévenir).

Opter pour la meilleure approche :

L'approche optimale dépend de la taille de l'ensemble de données à insérer. Pour les petits ensembles de données, l’une ou l’autre méthode convient. Pour les grands ensembles de données où la vitesse est cruciale, l'approche 2 avec des requêtes paramétrées est recommandée.

Optimisation supplémentaire :

L'insertion par lots dans l'approche 2 peut être optimisée davantage en concaténant les espaces réservés avant d'exécuter la requête :

$sqlArray = array();
foreach($rows as $row){
    $sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';
}
$sql .= implode(',', $sqlArray);
Copier après la connexion

Cela réduit considérablement le nombre d'espaces réservés qui doivent être liés avant l'exécution, améliorant les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal