IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

mysql_close quand l'utiliser ? [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 23
    Par défaut mysql_close quand l'utiliser ?
    Bonjour,

    J'ai une application composée de plusieurs pages php dont chacune consulte et/ou met à jour des tables de ma base de données; Plusieurs gestionnaires utilisent simultanément cette application et le moteur de ma base de données est MyIsam;
    Chacune de mes pages commence par la connection à ma base de données (instruction mysql_select_db($database_connectYieldProduc, $connectYieldProduc) );

    L'instruction mysql_close est elle nécessaire et quand doit elle être utilisée ?

    Merci de consacrer un peu de votre temps à mon problème.

  2. #2
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    Je ne me souviens plus ou je l'avais lu mais mysql_close permet d'optimiser tes pages...à mettre partout ou tu as de la requete en fin de script...

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par vorace Voir le message
    Je ne me souviens plus ou je l'avais lu mais mysql_close permet d'optimiser tes pages...à mettre partout ou tu as de la requete en fin de script...
    Ah, j'ai lu le contraire
    Normalement pour les connexions non persistantes, il est préférable de laisser PHP gérer automatiquement la clôture (bien plus rapide) par contre dans certains cas où tu ferais appels à plusieurs connexions sans les identifier explicitement, il est nécessaire de les fermer manuellement.

  4. #4
    Membre émérite Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Ah, j'ai lu le contraire
    Normalement pour les connexions non persistantes, il est préférable de laisser PHP gérer automatiquement la clôture (bien plus rapide) par contre dans certains cas où tu ferais appels à plusieurs connexions sans les identifier explicitement, il est nécessaire de les fermer manuellement.
    et pourtant (http://www.vulgarisation-informatiqu...iser-mysql.php), mais juste pour correction la fermeture doit se faire après la dernière requête et non à la fin du script puisque effectivement la fermeture se fait automatiquement...

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par vorace
    et pourtant (http://www.vulgarisation-informatiqu...iser-mysql.php), mais juste pour correction la fermeture doit se faire après la dernière requête et non à la fin du script puisque effectivement la fermeture se fait automatiquement...
    Le problème c'est qu'il ne donne pas vraiment d'explications, aucune même.

    De mon coté, certes c'est juste une idée personnelle que je me suis fait, cette idée serait inverse.
    Je m'explique.
    Il est dit dans la doc (pour les fonction mysql_* et pour une connexion non persistante) que par défaut MySQL reprend automatiquement la dernière connexion ouverte.
    Dans le code qu'il y a dans ce tuto rien n'est précisé concernant la connexion, c'est à dire qu'aucun lien de la ressource ($link en général) n'est indiquée explicitement au niveau des fonctions :
    mysql_query('...', aucun lien indiqué ici)
    mysql_close(aucun lien indiqué ici)
    mysql_fetch_array($requete, aucun lien indiqué ici)
    -> Ce sera alors la connexion par défaut qui sera utilisée (la dernière ouverte).

    Donc si on ferme la connexion (mysql_close) et qu'après on utilise mysql_fetch_array(), il faut bien quelque part une référence à la connexion.
    Et bien je me dis que (donc théoriquement) MySQL va ré-ouvrir la dernière connexion ouverte, théoriquement la même que celle qui a servie à faire la requête juste avant.

    Et bien ceci ne reviendrait-il pas au même de ne pas fermer la connexion ?
    Le fait de fermer puis le fait de ré-ouvrir tout de suite après, ne serait-il pas moins optimisé/performant que de ne pas fermer ?


    Bref ... je ne suis pas convaincu que fermer la connexion soit plus optimiser que de laisser MySQL générer tout ça.
    De plus il me semble bien avoir lu dans la doc (je ne sais plus où) que MySQL gérait particulière bien cette phase là.
    Puis il me semble bien aussi avoir lu qu'il est préférable de fermer une connexion que si on fait des connexions persistantes (cas très rare).


    Maintenant, on sait (pour la plupart) que les fonctions mysql (mysql_*) sont obsolètes et vouées à disparaitre du core de Php.
    Il n'a donc quelque part pas lieu de se prendre la tête sur ce point là.

    Par conséquent, comme il est fortement conseillé d'utiliser PDO ou MySQLi, quand est il pour ces 2 là ?
    Là aussi vaut-il mieux faire des fermeture/ré-ouverture de connexion à chaque requête ?
    En regardant un peu comment cela se fait (genre CMS, FrameWork), en général (voir toujours) c'est une connexion qui est 1 fois ouverte et c'est la même qui est utilisée tout le long du script.
    En somme, on laisse Php détruire l'instance (de la connexion), et théoriquement ça se fera lorsqu'elle ne sera plus utilisée.


    Tout cela est un avis personnel bien sûr, faut voir si l'idée correspond à la réalité ou pas.

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Par défaut
    T'as mis le doigt sur une de plus grand mystère du php ! ^^
    Pourquoi mysql_close existe-t-il ???

    La connexion se ferme automatiquement à la fin du script.
    Si les pages ne sont pas gourmandes en ressources et qu'il n'y'a qu'une seule connexion nécessaire pour le script, inutile d'utiliser mysql_close.

    En revanche,
    Si tu as une simple requête dans ton script et que s'en suit un script très gourmand, pour éviter qu'une connexion persiste longtemps alors qu'elle est inutile, il vaut mieux mettre fin à la connexion. Pour libérer le collecteur le plus rapidement possible.
    Et inversement si tu as un script lourd en premier, il vaut mieux faire la connexion avec mysql au dernier moment.
    Ceci afin que la connexion dure le moins longtemps possible.

    Le mieux est de toujours l'utiliser par défaut.
    C'est pas pour c'que bouffe en octet et en ram la ligne mysql_close;

    Il faut se connecter au dernier moment et se déconnecter dès qu'on en a plus besoin. Histoire de n'avoir que de bonnes habitudes...

    Là aussi vaut-il mieux faire des fermeture/ré-ouverture de connexion à chaque requête ?
    --> le mieux c'est de regrouper toutes tes requêtes en tête de script. non ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    //connection
    //toutes les req necess au script
    //deconnection
    // -> (temps de connection à la bdd optimal)
    //traitement
    ?>
    <html>
    <body>
    <?php echo $donneetraitee; ?>
    ...
    J'utilise tout l'temps ce schéma là. Mais c'est vrai qu'j'suis pas non plus un utiliseur régulier de cette fonction presque inutile puisque nos scripts ne doivent de toutes façons pas être lourds pour le bonheur de nos invités ! ^^
    C'est important de l'utiliser quand on a des tâches planifiées qui pètent des records en temps d'éxécution comme la génération de graphiques, de pdf's, ou d'envoi de mails et qu'on est à la limite de faire fumer son serveur mysql.
    Mais pour la plupart des sites meme dans ces cas particuliers, c'est inutile.
    Pour y trouver une utilité nécessaire, il faut s’intéresser aux connexion persistantes.

    2 solutions s'offrent à toi:
    A. Tu l'mets parc'que tu t'en fous de faire 2 mysql_close (un manu et un auto) et tu préfère prendre de bonnes habitudes ou parc'que tout simplement t'es cartésien ou qu'tu risques d'avoir des scripts lourds.
    B. Tes scripts sont pas gourmands, t'es pas cartésiens et tu es sure de pas oublier de le faire si tes scripts s'alourdissent et tu l'mets pas.

    Dans l'cas A tu favorises les performances mysql au détriment des performances php. (dans c'cas-ci, c'est minime)
    Dans l'cas B tu favorises les performances php au détriment des performances mysql.

    C'est à toi de voir !

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 325
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 325
    Billets dans le blog
    17
    Par défaut
    Utilise mysql_close( ) dès que tu n'as plus besoin d'accéder à la BdD.
    Cela permet de libérer une connexion au serveur MySQL.

    La doc http://fr2.php.net/mysql-close :
    L'utilisation de mysql_close() n'est pas habituellement nécessaire, puisque les connexions non persistantes ouverts sont automatiquement fermées à la fin l'exécution du script. Voyez aussi libérer des ressources.

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Je rejoins rawsrc et la citation de Seb.
    Et dans certains cas où différents blocs de code doivent utiliser une connexion à l'intérieur d'un même script, l'utilisation de mysq_close peut poser des problèmes (connexion perdue). A ta place je laisserais plutôt faire php.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/09/2006, 08h13
  2. Problème à l'affichage quand j'utilise SDL
    Par vincechaff10 dans le forum SDL
    Réponses: 8
    Dernier message: 25/07/2006, 11h34
  3. fonctions et classes... quand les utiliser ?
    Par fastmanu dans le forum Langage
    Réponses: 6
    Dernier message: 03/04/2006, 00h39
  4. [Struts-Layout] exception quand j'utilise <layout:submit&
    Par jahjah42 dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/11/2005, 11h17
  5. "sauter" un champ quand on utilise la tabulation
    Par jisse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 18/09/2005, 01h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo