Quand faire un mysql_close()

davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 - 11 août 2005 à 12:12
marc1306 Messages postés 115 Date d'inscription samedi 14 juin 2003 Statut Membre Dernière intervention 31 décembre 2009 - 23 déc. 2007 à 14:41
Bonjour à tous.



J'ai retrouvé une classe MySqlDb (classe pour gérer une db mysql donc..) ce matin.

En regardant le code, je me suis rendu compte qu'à aucun moment je ne faisait de mysql_close.



D'ou ma question: quand faire un mysql_close ?

bien sur, on pourrait répondre "ben quand tu veux fermer ta connection' .... ok..

Mais ma classe doit gérer elle meme (en "privé") la libération des
ressources (je veux donc eviter que l'utilisateur fasse un
$db->close()).



J'ai donc pensé faire un mysql_close apres chaque query... mais alors
ça veut dire qu'il faut faire un mysql_connect avant chaque query... et
sur une meme page php...il peut y'en a voir pas mal de query.



Donc je me demande si le mysql_close est bien necessaire: de toute
façon la ressource sera libérée en fin de script (d'apres la
documentation: http://be2.php.net/mysql_close)



mais qu'appellet-il "fin de script"? la recontre avec un "?>" ??

car admettons que je fasse de ma variable db une variable de session (dans la page init.php):



$_SESSION["mydb"]=new MySLDb(...) // va creer ma db et se connecter au serveur...



si dans une autre page je fais



<?php

$_SESSION["mydb"]->query("SELECT.....");

?>



cette page me renvoie pas d'erreur, ce qui veut dire que ma db est tjrs
connectée... et donc que aucun mysql_close n'a été fait à la fin du
script php dans init.php.

Peut être du au fait que ma db est une variable de session ?



Vous en pensez quoi ?








-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]

11 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 août 2005 à 14:23
Salut,



il faut fermer la connexion juste après la dernière requête (après le dernier mysql_query())



bref tu ouvres la connexion dès ta première requête, et tu la fermes à la dernière.



Pour contourner le problème j'ai fait une classe mysql (non postée ici) qui permet de gérer ça.



En gros ça donne ceci :



$mysql->requete('SELECT...',0,1,1);



le premier chiffre indique le numéro de la requête, ensuite le chiffre
suivant si il vaut 1 indique qu'il faut se connecter (mysql_connect())
et le chiffre d'après si il faut se déconnecter.



Bref si t'as trois requêtes à faire tu pourras faire ça :



$mysql->requete('SELECT...',0,1,0);

$mysql->requete('SELECT...',1,0,0);

$mysql->requete('SELECT...',2,0,1);


tu vois le truc ?
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
11 août 2005 à 14:40
mhh..oui je vois le truc..

en effet je crois (crains?) que ce soit la seule solution.



En fait j'essayer de trouver une astuce pour que l'utilisateur ne
doivent jamais gerer la connection (et surtout la déconnection) mais je
pense que c'est pas gérable.

Ta solution est la seule gérable (j'ai à peu pres le mme principe sauf
que le numero de requete est géré par la classe et renvoyé par la
fonction requete()).



En tout cas, merci pour la réponse !

-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 août 2005 à 15:19
Bah c'est pour ça qu'une fois j'ai ouvert une source d'IPB, et je ne
vois jamais de gestion de déconnexion dans leurs forums, je me demande
comment ça fonctionne... (je n'ai pas cherché à savoir vu qu'IPB est
gourmand et lent, mais bon ça m'étonne, ils ne doivent pas la fermer...)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
11 août 2005 à 21:44
PHP fait un mysql_close() automatiquement en fin de script ! Voila pourquoi certains sites ne l'écrivent pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 août 2005 à 21:52
oui mais il ne faut pas faire ça, car tu auras plus facilement des erreurs de max_users_connections

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
11 août 2005 à 22:08
En même temps, y'a tellement de modules et autres trucs à la con que c'est normal qu'ils laissent tout ouvert.



Autrement, autant faire une fonction type :

function last_query($query) {

$query = mysql_query("SELECT....");

mysql_close();

return $query;

}

pour pouvoir faire sa dernière query.



Car généralement, on sait tous ou se termine (normalement) notre script, donc il ne devrais pas y avoir de problème.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
11 août 2005 à 22:09
Honte à moi, j'ai mal écrit ma fonction :(
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
11 août 2005 à 22:30
"

En même temps, y'a tellement de modules et autres trucs à la con que c'est normal qu'ils laissent tout ouvert."



C'est pour ça que choisir un CMS ou un forum tout fait doit se faire en connaissance de cause.

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
12 août 2005 à 08:54
arf!

je vois qu'il n'y a pas qu'une seule réponse...



pas évident évident....

pour l'instant, je fais un mysql_close apers chaque query..et un connect avant...



pas bcp de temps pour y reflchir + pour l'intant :(
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
12 août 2005 à 09:08
C'est une solution encore plus gourmande, tu bouffes énormément de
ressources (la connexion bouffe énormément de ressources avec mysql)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
0
marc1306 Messages postés 115 Date d'inscription samedi 14 juin 2003 Statut Membre Dernière intervention 31 décembre 2009
23 déc. 2007 à 14:41
également dans ces réflection et aussi a la recherche de la classe pour mysql parfaite..
ayant test ZF ,symfonie et d'autres classes..
je crois bien qu'il va falloir faire comme beaucoup : creer sa propre classe

si quelqu'un a trouver une classe en php5 pour la gestion mysql , une classe complete , bien detaillé avec gestions des exceptions , des closes etc..
efficace simple et légé :)

meme sur ce site y'a quelques classes mais visiblement tjrs des scripts en construction

Marc.
0
Rejoignez-nous