PHP : interet du mysql_close() ???

Fermé
Melaine - 6 févr. 2006 à 11:11
 bluetiger007 - 23 sept. 2010 à 14:37
Bonjour à tous

Petit souci en pho ou plutot demande d'infos :
J'ai un site web qui effectue des requetes dans une DB MySQL.
A chaque fois que j'ai besoin d'accéder aux données de la DB je fais un include(fichier_connexion_DB.php) en premiere ligne de mon fichier, me permettant ainsi d'inclure les données de connexion et j'effectue mes requetes.

FICHIER_CONNEXION_DB.PHP

//initialisation de l'heure
setlocale (LC_ALL, 'fr_FR');
$ecarttime=28800;
$dbhost = "localhost";
$dbname = "xoxoxo";
$dbuser = "yoyoyo";
$dbpasswd = "zozozzo";
$id_connect=MYSQL_CONNECT("$dbhost","$dbuser","$dbpasswd");
echo(mysql_error());
$bdd=mysql_select_db("$dbname");
echo(mysql_error());

Jusqu'ici pas de soucis.

Le gros pb c'est que me site plante de temps en temps, et la seule explication qu'a pu me fournir mon hébergeur c'est le fait que je ne mette pas de fermeture de connexion à ma base, à savoir le fameux mysql_close($db)

Alors j'ai fais ma petite recherche et j'ai pu lire sur divers sites php que "la fonction mysql_close() n'est pas vraiment obligatoire avec un mysql_connect(), car par défaut la connexion sera coupée automatiquement à la fin de l'exécution du script. "

Si qq'un peut m'éclairer sur ce pb, merci d'avance

Melaine
A voir également:

4 réponses

Pour ceux qui ne seraient pas encore au courant, c'est un bug de PHP 5.3.0 et la librairie lib_mysql qui fait planter Apache lorsque la fonction mysql_close est appelée sans paramètre.
Il ne s'agit pas d'un bug de Wamp, mais bien de PHP.
Ce bug a d'ailleurs été corrigé dans la version PHP 5.3.1 sorti récemment.

La solution la plus propre n'est donc pas de supprimer la fonction mysql_close, mais de lui passer le paramètre $link, $connect, bref, la variable renvoyée par la fonction mysql_connect comme montré ci-dessus.
9
Alors je tiens à signaler que désormais, sur la dernière version de wamp, en local, ce mysql_close() conduit à une erreur de apache. idem pour split, et sans doute d'autres fonctions php. :(
4
thierrysudfr
27 oct. 2009 à 20:28
Bonsoir,
Je viens de télécharger le dernier Wampserver, avec les dernières versions php et mysql, je confirme que la fonction mysql_close() plante le serveur apache.
Je dois faire le tour de toutes les pages de mon site faisant appel à cette fonction pour la supprimer, je trouve ce bug assez étrange.
Qui d'autre rencontre ce problème, et qui aurait une solution miracle ?
0
thierrysudfr > thierrysudfr
27 oct. 2009 à 21:28
En cherchant sur le net, je me réponds à moi-même, en espérant que cela serve à d'autres :

Apparemment, il suffirait de préciser la variable de connexion dans la fonction

<?php
$connect = mysql_connect('ip','user','password');
mysql_close($connect);
?>

Ca fonctionne !
0
bluetiger007
23 sept. 2010 à 14:37
Moi aussi g cette erreur!
je suis obligé de donné une valeur arbitraire à la variable de Mysql_close() pour evité le
plantage Apache là bien q y'a msg d'erreur mais aumoin ça passe et ça tourne....
je cherche toujour une vrai solution...
0
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
6 févr. 2006 à 12:03
normalement, le mysql_close sert à libérer l'espace mémoire pris sur le serveur par la conection MySQL..Après je peux pas t'en dire + ...
2
Misdrhaal Messages postés 49 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 23 février 2006 16
6 févr. 2006 à 12:17
Quand on fait des requetes sur un serveur MySQL il y a de la RAM occupée :
- par la connection au serveur
- par la requete en elle-même.

La connection est lancée par mysql_connect(),
Ensuite selection de la base à laquelle se connecter mysql_select_db()

A ce moment là on est connecté au serveur et à une certaine base de données.
mysql_close ferme la connection au serveur (libérant ainsi l'espace mémoire de connection), il se fait automatiquement à la fin de chaque script (mais je préfère le rajouter dans un fichier inc de deconnexion appelé via un include, à la fin du script).

Ceci étant je n'ai jamais entendu dire qu'un mysql_close() était obligatoire!!!
La réponse de ton heberger PHP me semble vraiment bizarre...

Si tu fais de grosses requetes (qui demandent du temps et de la mémoire), il est nécéssaire le libérer l'espace mémoire pris sur le serveur à la fin de chaque requete.
ce que je fais généralement (pour par exemple une requete qui travaille sur ue table de 2 millions de lignes) c'est :

- requete en elle meme
- je stocke toutes les lignes dans un tableau
- je vide ensuite ma requete via "mysql_free($query)"
- je travaille sur le tableau (ou sur le fichier crée à parti du tableau suivant le nombre de lignes).

Voila donc les deux truc simportants pour gérer les requetes (d'autres astuces possibles je pense).

La réponse m'apparait quand meme saugrenue...
2
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
6 févr. 2006 à 21:06
Moui, j'ai jamais utilisé mysql_close() ....

Je suppose que ça sert plutôt pour des scripts Php hors des pages web et dont l'execution est plus longue, ou encore pour des scripts qui se connectent à plusieurs serveurs de base de données à la fois et qui ont besoin de libérer régulièrement les ressources.

Mais normalement à la fin du script, cette connexion est fermée automatiquement.
0