Page 1 sur 1

[PDO] Requêtes multiples

Posté : 24 juin 2016, 11:44
par foetus69
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 ;)

Re: Un petit exemple siouplait

Posté : 24 juin 2016, 13:34
par @rthur
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.

Re: Un petit exemple siouplait

Posté : 27 juin 2016, 12:59
par foetus69
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 ?

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 13:39
par moogli
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.

@+

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 14:43
par foetus69
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

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 14:50
par moogli
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).

@+

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 15:03
par foetus69
Entendu :)

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

Comment tu fais pour savoir ça ?

Je suis curieuse ^^

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 16:32
par moogli
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 ;)

@+

Re: [PDO] Requêtes multiples

Posté : 27 juin 2016, 16:56
par foetus69
Ok merci m'sieu ^^

C'est résolu !