OVH Cloud OVH Cloud

mysql_connect

3 réponses
Avatar
Gabriel
bonjour,

je ne comprends pas le comportement de mysql_connect:
la doc de http://fr2.php.net/manual/fr/function.mysql-connect.php dit :

Si un second appel à mysql_connect() est fait avec les mêmes
arguments, PHP ne va pas ouvrir une nouvelle connexion, mais va
retourner l'identifiant de la connexion déjà ouverte.

c'est bien ce qui me semblait, ca m'évite de devoir gérer le pool de cnx.

Mon code fait ceci :

function C_MysqlDb($host, $user, $pwd, $database) {


$dbLink = mysql_connect($host, $user, $pwd);
$this->database = $database;

Bib_log(FOUNDATION_LOG, "Class C_MysqlDb connecting.");
if ($this->dbLink == FALSE){
Bib_log(SQL_LOG, "Error while Connecting : " . mysql_error());
}
Bib_log(FOUNDATION_LOG, "Class C_MysqlDb connected.");
$sel = @mysql_select_db($database);
if ($sel == FALSE){
Bib_log(SQL_LOG, "Error while selecting database : $database " .
mysql_error());
}
Bib_log(SQL_LOG, "Selection of the database $database answered : " .
mysql_error());
echo $this->dbLink;
}

Evidemment, les paramètres $host, $user, $pwd ne changent pas donc en
toute logique, il ne devrait pas établir de nouvelle connexion.

Mais bon, je me connecte sur mon serveur :
show status;

bla blah
Connections 20 ----------> il si je fais un refresh de ma page qui
recree un objet C_MysqlDb et donc recree une cnx (enfin non normalement
mais bon :) )
20 devient 21 .

Je me suis aperçu de cela qd mon appli ne répondait plus et que j'avais
191 cnx.

Je travaille en php 5.0.3.

Qqun peut-il m'expliquer ce qui se passe svp ?

Je continue mes tests pdt ce temps.

Merci à vous pour votre aide !

3 réponses

Avatar
Thibaut Allender
je ne comprends pas le comportement de mysql_connect:
la doc de http://fr2.php.net/manual/fr/function.mysql-connect.php dit :

Si un second appel à mysql_connect() est fait avec les mêmes arguments,
PHP ne va pas ouvrir une nouvelle connexion, mais va retourner
l'identifiant de la connexion déjà ouverte.


dans le *meme script*

faut-il également rappeler les connexions sont fermées de façon
implicite en fin d'execution du script ?
non, quand même pas, on le lit dans la doc citées ;)

" Le lien sera fermé automatiquement dès que l'exécution du script sera
terminée, à moins d'être fermé explicitement avec mysql_close()."

sauf evidemment si on utilise une connexion persistante

Connections 20 ----------> il si je fais un refresh de ma page qui
recree un objet C_MysqlDb et donc recree une cnx (enfin non normalement
mais bon :) )
20 devient 21 .


refresh de la page, donc nouvelle execution du script donc ouverture
d'une nouvelle connexion
ceci dit, la précédente aurait effectivement dûe être fermée à la fin du
script

le script se plante ? il tourne en boucle ?
le serveur est configuré pour utiliser des connexion persistantes par
défaut ?

il serait peut-être bon de forcer un petit mysql_close(); même si a
priori ça n'est pas nécessaire en temps normal

--
thibaut allender | freelance | http://capsule.org

Avatar
Gabriel
dans le *meme script* oui, à des fins de tests

faut-il également rappeler les connexions sont fermées de façon
implicite en fin d'execution du script ?
non, quand même pas, on le lit dans la doc citées ;)
C'est précisemment ce que je teste :)




refresh de la page, donc nouvelle execution du script donc ouverture
d'une nouvelle connexion
ceci dit, la précédente aurait effectivement dûe être fermée à la fin du
script
Exactement ce que je me suis dit, étrange ...



le script se plante ? il tourne en boucle ? non, le nbre de cnx monte c'est tout.

le serveur est configuré pour utiliser des connexion persistantes par
défaut ?
Pas que je sache mais je vais vérifier..



il serait peut-être bon de forcer un petit mysql_close(); même si a
priori ça n'est pas nécessaire en temps normal

J'aime pas ce raisonnement: "on le fait dans le doute" : c'est pas de la

magie noire ce truc, ca doit avoir un comportement qui suit la doc ou
alors c'est un bug.

Je vais continuer mes recherches et merci pour ta contribution :)

cordialement

Avatar
Thibaut Allender
le serveur est configuré pour utiliser des connexion persistantes par
défaut ?


Pas que je sache mais je vais vérifier..


un petit phpinfo() et un coup d'oeil à la rubrique mysql devrait te
renseigner là dessus

J'aime pas ce raisonnement: "on le fait dans le doute" : c'est pas de la
magie noire ce truc, ca doit avoir un comportement qui suit la doc ou
alors c'est un bug.


moi non plus, mais en attendant de trouver la vraie source du problème,
c'est toujours mieux que d'engorger le serveur mysql

--
thibaut allender | freelance | http://capsule.org