Page 1 sur 1

Connexions SQL multiples ?

Posté : 20 févr. 2009, 15:47
par kseum
Bonjour à tous,

J'ai une petite question d'optimisation à vous poser.

Imaginons que j'ai une classe qui possède plusieurs méthodes à l'intérieur desquelles je réalise à chaque fois une connexion à mysql, par exemple :
<?php
class Machin {
     // une méthode avec une connexion SQL
     function truc1(){
         $sql = new Sql();
         $sql->connexion();
         ...
         $sql->close();
     }

     // une autre méthode avec une connexion SQL
     function truc2(){
         $sql = new Sql();
         $sql->connexion();
         ...
         $sql->close();
     }
}
?>
Lorsque je vais utiliser mes méthodes...

$obj = new Machin();
$obj->truc1();
$obj->truc2();

... cela va me créer à chaque fois une nouvelle connexion à mySQL, alors qu'une connexion au préalable existait déjà ! N'y a t-il donc pas un moyen de vérifier si la connexion est déjà ouverte pour éviter d'en recréer une à chaque fois ???

Merci pour votre aide ;)

Posté : 20 févr. 2009, 16:09
par Ryle
Pourquoi ne pas simplement ouvrir ta connexion une seule fois dans le constructeur de ta classe,
et la garder dans un attribut de manière à pouvoir l'utiliser n'importe quand dans ton instance ? :)

Posté : 20 févr. 2009, 16:32
par kseum
Merci pour ta réponse rapide. C'est bien pensé ;)
Par contre :

- comment je peux gérer la déconnexion à la BDD ?
Edit* : - et si j'instancie plusieurs classes de ce type, j'aurai quand même plusieurs connexions. Comment éviter ça ?

Merci :D

Posté : 20 févr. 2009, 16:49
par AB
Ou tu peux créer une classe de connexion avec des méthodes statiques, ainsi une seule instance sera créée quelque soit le nombre d'appel à la classe de connexion http://www.phpfrance.com/forums/voir_re ... php#280099

Pour la déconnexion, elle se fait automatiquement à la fin du script, et perso j'ai pris l'habitude de laisser php se débrouiller tout seul après avoir eu des pb dans certains scripts en utilisant mysql_close(). D'ailleurs la doc dit qu'on peut s'en passer http://fr2.php.net/mysql_close. Eventuellement j'utilise mysql_free_result()

Posté : 20 févr. 2009, 17:08
par kseum
Niquel merci :wink: