Erreur mysql_connect(): Too many connections [Résolu]

Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
- - Dernière réponse : cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
- 6 juin 2005 à 19:37
Bonjour,

Le message suivant "Warning: mysql_connect(): Too many connections in ..." apparait quelque fois sur mon site qui utilise une base de données.

A quoi celà est-il dû ?
Existe-il une solution pour intercepter l'erreur afin d'afficher un autre message.

Merci de votre aide.
erreur connexion
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
3
Merci
Salut,



soit ton hébergeur est mauvais et donc son serveur est saturé, soit ton script n'est pas optimisé.



Bref tu dois ouvrir la connexion, faire tes requêtes, fermer la connexion et ensuite traiter les requêtes.



d'ailleurs l'exemple donné ci-dessus est un très mauvais exemple...



mysql_connect('hote','user','passe');

mysql_select_db('base');

$requete1=mysql_query('machin...');

$requete2=mysql_query('machin...');

$requete3=mysql_query('truc bidule');

mysql_close();



ensuite tu traites tes requêtes :



while($r=mysql_fetch_row($requete1))

{



}



etc...

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Anthomicro
Messages postés
64
Date d'inscription
mardi 14 janvier 2003
Dernière intervention
5 août 2005
0
Merci
As-tu fermé toutes les connexions au serveur MySQL que tu a ouvertes.



Chaque script qui utilise mysql_connect() devrait se terminer ou au moins contenir un appel à mysql_close().



Normalement, le système peut le gèrer automatiquement mais mieux vaut le prévoir.


Pour l'intercepter :



en utilisant @mysql_connect(); tu n'auras plus de message. Teste si la valeur de retour est null et affiche le message que tu veux.



connect = @mysql_connect("localhost","user","password");

if(empty(connect))

{

echo "Erreur de connexion au serveur MySQL";

}

else

{

//Tes traitements

//Fermeture de la connection

mysql_close(connect);

}



@++


<hr>

Every problem has a solution. The difficulty is to find it out.
Commenter la réponse de JeanPoldeux
Messages postés
54
Date d'inscription
jeudi 22 avril 2004
Dernière intervention
20 décembre 2005
0
Merci
Merci,

C'est vrai que je n'utilise pas trop mysql_close, je vais corriger mes scripts

Richard
Commenter la réponse de richarddum
Messages postés
64
Date d'inscription
mardi 14 janvier 2003
Dernière intervention
5 août 2005
0
Merci
Je ne vois pas en quoi l'exemple est très mauvais...



Si ce n'est une erreur de vocabulaire (traitements - requêtes)



De plus si les résultats d'une requête sont utilisés dans une autre,
ouvrir et fermer entre chaque requête == consommateur de ressources



Pour un champion de la politesse .......
Commenter la réponse de JeanPoldeux
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
J'ai pas dit "ouvrir et fermer entre chaque requête"



Ensuite ton code est très mauvais, pourquoi ?



bah parce que tu ouvres la connexion, tu fais les requêtes et tu
traites les requêtes la connexion ouverte ce qui entraîne plus
facilement un problème de max_user_connections, alors que le problème
posé est justement un problème de max_user_connections



Mettons que ta page avec ton code mette 3 secondes à se générer (c'est
possible si le code est crade ou le serveur surchargé) et que parmis
ces 3 secondes, il faut 500ms à mysql pour traiter les requêtes. Le
max_user_connections est mettons de 5.



dans ton cas, la connexion dure 3 secondes. Il suffit que 5 visiteurs
consultent une page en même temps (ou avec un décalage de 3 secondes
max) pour que le script tombe, bref ça nous fait même pas 5
utilisateurs maxi par seconde.



Dans l'autre cas, les requêtes durent 500 ms (c'est encore excessivement crade mais c'est volontaire)



Bref la connexion dure 500 ms, tu peux accueillir par seconde 10 visiteurs simultanés sans problème.



Ensuite si tes requêtent durent 100 ms ce qui est largement faisable, tu peux accueillir 100 visiteurs simultanés sans problème.



Enfin bon c'était juste pour la précision hein...

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro
Messages postés
9440
Date d'inscription
mardi 9 octobre 2001
Dernière intervention
13 avril 2007
0
Merci
Ensuite je dois commenter le
connect = @mysql_connect("localhost","user","password");
if(empty(connect))



qui devrait être remplacé par



if(!@mysql_connect('localhost','user','password'))

{



}



ou t'as compris une de tes erreurs ?

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
Commenter la réponse de cs_Anthomicro

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.