Aller au contenu

array et remplissage bdd


Sujets conseillés

Posté

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

Posté

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.

Posté

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

Posté (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é par heliotrope
Posté

Hello,

et selon les cas un "INSERT DELAYED" peut être très efficace aussi ; à condition que cela corresponde au besoin.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...