PARTAGER UNE CONNEXION MySQL ENTRE PLUSIEURS SESSION

Résolu
CleFac Messages postés 11 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 9 avril 2010 - 25 mars 2008 à 17:35
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 9 déc. 2008 à 18:30
bonjour,

j'ai remarqué que sur certains hébergeur le nombre de connexions silmultées sont limitées.
donc j'aimerai savoir comment partager une connexion MySQL entre plusieurs session ?

en vous remerciant

3 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
25 mars 2008 à 18:20
Salut,

En fait, on ne peut pas. Ca, c'est la réponse rapide.
En développant un peu, maintenant...

La durée de vie d'une connexion non persistante à MySQL est liée à la durée d'exécution du script PHP qui l'ouvre. Cela signifie que si un script PHP ouvre une connexion non persistante à MySQL et ne la ferme pas explicitement (avec mysql_close()), la connexion sera de toute façon fermée lors de la fin du script.

Un connexion persistante, quant à elle, n'est pas automatiquement fermée à la fin de l'exécution du script : elle reste ouverte (sauf bien sûr si l'on utilise mysql_close()). Elle peut alors être réutilisée par un autre script. Voici comment ça se passe alors :
- un premier script ouvre la connexion au serveur MySQL
- le premier script fait ce qu'il a à faire avec cette connexion
- le premier script se termine sans avoir fermé la connexion
- plus tard (ça peut être 1 ms après) un autre script demande à PHP de se connecter à MySQL
- si le serveur, le nom d'utilisateur et la base de données sont les mêmes, PHP réutilise la connexion qu'il avait gardée ouverte
- et ainsi de suite
Concrètement, on fait toujours l'ouverture avec mysql_connect(), c'est PHP qui décide s'il doit réellement se connecter ou bien utiliser une connexion existante.

Ca, c'est juste la base... Maintenant, il faut tenir compte du nombre de visiteurs et du temps d'exécution des scripts (qui sera difficilement mesurable, en tout cas jamais de manière fiable). Le serveur (la machine) est capable de faire plusieurs choses à la fois. Concrètement, plus d'un script PHP pourront être en cours d'exécution en même temps, utilisant alors (éventuellement) plusieurs connexions MySQL simultanément. Si trop de connexions sont maintenues ouvertes, le serveur MySQL refusera d'en créer de nouvelles.

Pour éviter ce genre de problème, il y a plusieurs choses possibles :
- utiliser des connexions non persistantes
- fermer les connexions explicitement avec mysql_close() aussitôt que la connexion n'est plus nécessaire.
- corollaire du point précédent : on peut essayer (quand c'est possible) de faire ses requêtes MySQL le plus tôt possible pour utiliser la connexion un temps le plus court possible

Si vraiment on ne s'en sort pas, qu'on a trop de trafic pour le nombre maximum de connexions MySQL autorisées :
<li>on change d'hébergeur (ou d'offre), parce que celui qu'on a n'est vraiment pas adapté</li><li>on peut aussi accorder une attention toute particulière à l'optimisation de :
<li>ses scripts PHP</li><li>l'architecture des tables et des index de la base de données</li></li>

<hr size="2" width="100%" />Neige
3
CleFac Messages postés 11 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 9 avril 2010
25 mars 2008 à 23:03
je te remercie neigedhiver, tu as été clair, net et précis.
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
9 déc. 2008 à 18:30
Je confirme, très précis même.
Merci.

Signé Sagat
0
Rejoignez-nous