[RESOLU] [PDO] Requêtes multiples

Eléphant du PHP | 363 Messages

24 juin 2016, 11:44

Bonjour les loulous,

Est-ce que quelqu'un peut me dire comment ça se passe dans un fichier php quand il y a 2 requêtes pdo.

Je voudrais avoir un exemple pour les appels, les déclarations etc... car j'ai un doute au niveau des ouvertures, fermetures, bref de la bonne syntaxe écrite proprement.

Merci à vous.

Fée


Modération : un titre poil plus parlant ;)
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8627 Messages

24 juin 2016, 13:34

Bonjour à toi,
Est-ce que quelqu'un peut me dire comment ça se passe dans un fichier php quand il y a 2 requêtes pdo.
Bah ça se passe bien en général :-)

Ça dépend si c'est pour faire plusieurs requêtes PDO sur la même base de données ou si c'est sur des base de données différentes.

Si c'est la même base, tu fais une seule fois la connexion et ensuite autant de requête avec query() ou exec() que tu veux.

Si c'est plusieurs bases, tu fais alors une connexion par base (en changeant le nom du $link our avoir un $link par base) et tu passes le $link de la base concernée en paramètre de la requête voulue.

Essaye et si tu rencontres un problème, donnes nous le code problématique que l'on puisse t'aider concrètement.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 363 Messages

27 juin 2016, 12:59

Bonjour à toi,
Est-ce que quelqu'un peut me dire comment ça se passe dans un fichier php quand il y a 2 requêtes pdo.
Bah ça se passe bien en général :-)
Mdr :)

En fait j'ai une base pour un site appelé sobrement bddsite et quelques tables.

Pour afficher un tableau des resultats de chaque table je fais ceci :
<?php 
$connexion_pdo = new PDO("mysql:host=localhost";dbname="bddsite","root","");
$requete_pdo = $connexion_pdo->prepare("SELECT id_table1, nom_table1 FROM table1 ORDER BY id_table1");
$requete_pdo-> execute();
		 while($resultat_pdo = $requete_pdo->fetch()){
			echo $resultat_pdo["id_table1"];
		 }
?>
Si je veux afficher une table 2 sur la même bdd je vais un $connexion_pdo2 ou je peux reprendre $connexion_pdo ? et juste faire $requete_pdo2 = $connexion_pdo->prepare("SELECT id_table2, nom_table2 FROM table2 ORDER BY id_table2"); ???

Quelle est la bonne pratique ? Comment se gère une fermeture pdo ? C'est automatique ?
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8756 Messages

27 juin 2016, 13:39

salut,

J'ai changé le titre du histoire que d'autre gens puisse trouver une réponse en sélectionnant ton sujet par le titre ;) (ça aide aussi pour les gens qui voudraient t'aider).

Pour répondre à ta question, si tu n'utilises qu'une seule base de données tu instancies un objet PDO que tu utilises tout au long du script. Si tu as des fonctions passe l'objet "pdo" en paramètre de celle ci.

Du coup il faut faire ce que tu as mis ci dessus, a une chose prêt : il faut clore le curseur résultat : http://php.net/manual/fr/pdostatement.closecursor.php

du coup
<?php 
$connexion_pdo = new PDO("mysql:host=localhost";dbname="bddsite","root","");
$requete_pdo = $connexion_pdo->prepare('SELECT id_table1, nom_table1 FROM table1 ORDER BY id_table1');
$requete_pdo-> execute();
while($resultat_pdo = $requete_pdo->fetch()){
    echo $resultat_pdo["id_table1"];
}
$requete_pdo->closeCursor();
// requête 2
$requete_pdo2 = $connexion_pdo->prepare('SELECT id_table2, nom_table2 FROM table2 ORDER BY id_table2');
$requete_pdo2-> execute();
while($resultat_pdo = $requete_pdo->fetch()){
    echo $resultat_pdo['id_table2'];
}
$requete_pdo2->closeCursor();
Il n'existe pas de méthode pour fermer le connexion au sgbd cela est fait par le ramasse miette (garbage collector) lorsque la connexion n'est plus utile, au pire en fin du script.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 363 Messages

27 juin 2016, 14:43

Bonjour,

D'accord et merci beaucoup !!!!

J'ai lu quelque part qu'on pouvait faire ceci : unset($connexion_pdo);

Ailleurs j'ai lu qu'il fallait faire $connexion_pdo=null;

:-k
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8756 Messages

27 juin 2016, 14:50

cela peux forcer le ramasse miette a faire son boulot un peu plutôt (il va moins perdre de temps à choisir s'il doit ou non désallouer ou non l'objet (et donc clore la connexion).

tu peux le faire si tu veux mais cela ne change pas grand chose à la chose.
Attention a le faire au bon moment pour ne pas te retrouver sans connexion ou devoir en refaire une (c'est l'une des actions les plus coûteuses en temps).

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 363 Messages

27 juin 2016, 15:03

Entendu :)

"c'est l'une des actions les plus coûteuses en temps"

Comment tu fais pour savoir ça ?

Je suis curieuse ^^
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8756 Messages

27 juin 2016, 16:32

lecture ^^

La négociation de la connexion prends du temps , souvent plus qu'une simple requête SQL.
Après c'est assez "simple" à tester, il faut profiler ton script.

Pour cela utilise xdebug, tu trouveras plein d'info sur le site pour ça.
au final tu pourras avoir des stats sur ce qui prends du temps dans ton script.
Prévoit un peu de place sur ton disque si tu utilise le truc un peu longtemps les fichiers de trace vont prendre de la place ;)

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 363 Messages

27 juin 2016, 16:56

Ok merci m'sieu ^^

C'est résolu !
Dis-donc fossoyeur, t'as une dent contre moi ou quoi ?