Connexions SQL multiples ?

Petit nouveau ! | 3 Messages

20 févr. 2009, 15:47

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 ;)

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

20 févr. 2009, 16:09

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 ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 3 Messages

20 févr. 2009, 16:32

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

ViPHP
AB
ViPHP | 5818 Messages

20 févr. 2009, 16:49

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()

Petit nouveau ! | 3 Messages

20 févr. 2009, 17:08

Niquel merci :wink: