Luckyluk Posté 6 Août 2008 Posté 6 Août 2008 bonjour, j'ai un script qui récupère des données et qui me génère une boucle de remplissage d'un tableau CODE Array ( [1] => Array ( [nom] => blabla [adresse] => blaabla [cp] => blabla ) [2] => Array ( [nom] => blabla [adresse] => blaabla [cp] => blabla ) [3] => Array ( [nom] => blabla [adresse] => blaabla [cp] => blabla ) [4] => Array ( [nom] => blabla [adresse] => blaabla [cp] => blabla ) ) j 'ai donc des données structurées en stock que je voudrais stocker en base de données. mon réflexe premier est de générer une connexion mysql à l'intérieur de la boucle mais je sais que c'est la dernière chose à faire vu le nombre de connexion que celà demanderait malheureusement, mes connaissance en manipulation de Array est trop lointaine le but serait donc de ne faire qu'une seule connexion à la fin qui reprendrait l'ensemble des données et aller les stocker en bdd quelqu'un à une piste? merci d'avance
captain_torche Posté 6 Août 2008 Posté 6 Août 2008 Mettons que ton array se nomme $tab : <?php// code de ta connexion$connexion = mysql_connect('url_base', 'login', 'mdp');mysql_select_db('ta_base', $connexion);foreach($tab as $entree) { $sql = "INSERT INTO ta_table(nom, adresse, cp) VALUES('$entree[nom]', '$entree[adresse]', '$entree[cp]')"; $req = mysql_query($sql);}mysql_close($req);?> Il y a peut-être plus propre (Insertions de plusieurs entrées en une seule ligne de SQL ?), mais je ne saurai pas faire.
Luckyluk Posté 6 Août 2008 Auteur Posté 6 Août 2008 merci, ça à l'air impec j'ai juste un petit message d'erreur Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in E:\prog\wamp\www\test3.php on line 170 mais qui n'empeche pas le remplissage de la base de donnée encore merci
captain_torche Posté 6 Août 2008 Posté 6 Août 2008 Houlà, je faisais pas gaffe à ce que j'écrivais, moi ! Supprime le $req dans la parenthèse du mysql_close
heliotrope Posté 8 Août 2008 Posté 8 Août 2008 (modifié) Salut, tu peux faire des inserts multiples pour limiter le nombre de requète INSERT INTO ma_table (champ_a,champ_b)VALUES ('1', 'one'), ('2', 'two'), ('3', 'three') L'idéal pour ne pas excéder la Max Allowed Packet size de MySql, tu peux dans ta boucle intégrer un compteur pour faire des inserts par 100 par exemple // code de ta connexion$connexion = mysql_connect('url_base', 'login', 'mdp');mysql_select_db('ta_base', $connexion);$cpt = 0;$limit = 100;foreach($tab as $entree) { if($cpt == 0) $sql = "INSERT INTO ta_table(nom, adresse, cp) VALUES"; $insert[] = " ('$entree[nom]', '$entree[adresse]', '$entree[cp]')"; if($cpt == $limit){ $sql .= implode(',',$insert); $req = mysql_query($sql); $cpt = 0; } $cpt++;}mysql_close($req); Bon faudrait affiner le code car si t'as moins de 100 enregistrements la requete sera pas éxécutée mais t'as le principe :-) Modifié 8 Août 2008 par heliotrope
Kioob Posté 8 Août 2008 Posté 8 Août 2008 Hello, et selon les cas un "INSERT DELAYED" peut être très efficace aussi ; à condition que cela corresponde au besoin.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant