Insertions multiples en SQL
Classé dans : Programmation
Sur les forums d’entraide entre Webmaster je vois souvent la même erreur lorsqu’une personne souhaite insérer dans sa base de données plusieurs enregistrements.
La plupart du temps voici le type de code que l’on retrouve.
<?php
foreach($monTableau AS $tableau) {
mysql_query("INSERT INTO maTable (champ1,champ2,champ3) VALUES ($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])");
}
?>
Même si ce code fonctionne cela suppose qu’une requête sera effectuée pour chaque ligne du tableau « $monTableau ». Ce qui risque de poser problème si vous avez un tableau de grande taille.
L’idéal est plutôt de générer votre requête dans votre boucle puis de ne lancer qu’une seule requête qui se chargera d’insérer tous vos enregistrements en une fois.
<?php
$addToQuery="";
foreach($monTableau AS $tableau) {
$addToQuery.=($addToWhere=="")?"($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])":",($tableau['valeur1'],$tableau['valeur2'],$tableau['valeur3'])";
mysql_query("INSERT INTO maTable (champ1,champ2,champ3) VALUES (valeur1,valeur2,valeur3)");
}
$query="INSERT INTO maTable (champ1,champ2,champ3) VALUES ".$addToQuery;
mysql_query($query);
?>
- Permalien
- maniT4c
- 9 nov 2009 10:17
- Commentaires (3)

le 15 novembre 2009 à 15:08
Effectivement la deuxième méthode est la meilleur. C’est d’ailleurs celle que j’utilise personnellement.
le 16 novembre 2009 à 19:32
Bonjour,
A quoi sert le foreach dans cette exemple, pourquoi ne pas injecter directement dans mysql en évitant de faire cette boucle ?
le 17 novembre 2009 à 8:59
@MFB2B les données à insérer dans la table se trouve dans un tableaux. On peut considérer par exemple qu’on a récupéré ces informations d’une autre table ou d’un fichiers csv peut importe. L’important est qu’on ne sait pas à l’avance combien de données nous aurons à traiter. La boucle permet donc de scanner tout le tableau et de générer la requête sql.