Voir la version complète : Solution aux 3 Connections MYSQL maxi?
Avec mon 60GP, je suis limité à 3 connexions simultanées à MYSQL
J'ai fait cette fonction pour éviter l'affichage de l'erreur en cas de dépassement (qui n'est pas simple à reproduire...;) )
J'appelle cette fonction à chaque fois que je fais une requète.
function execRequete($pRequete){
$ww1="sql";
$ww2="aze";
$ww3="";
$i=0;
do{
if(!$idReq = mysql_connect($ww1,$ww2,$ww3)){sleep(1);}
$i++;
if($i>10){break;}
}while (!$idReq);
$result=mysql_select_db($dataBase);
$retour=mysql_query($pRequete);
mysql_close($idReq);
return $retour;
}
Je pensais que ça allait marcher... mais non... j'ai encore eut une erreur hier... (pourtant je n'ai pas beaucoup de visiteurs simultanés)
Cette fonction vous semble-t-elle bonne?
L'erreur se déclenche t-elle bien sur le mysql_connect ?
L.Boggio
09/03/2004, 19h56
Il suffit de faire un
if (! mysql_connect($server, $username, $password)
{
// traitement d'erreur
}
else
{
// traitement normal
}
De la doc PHP :
mysql_connect() retourne une ressource de connexion au serveur MySQL en cas de succès, et sinon FALSE
Donc mon code devrait marcher?
Je trouve ça bizarre que j'ai quand même un message:
My_sqlconnect: max connexion....
Alors que je n'ai pas grand monde en simultané sur mon site.
Y'a un truc qui m'échappe....
planete95
11/03/2004, 22h59
ton script ne ferme peut etre pas les connections sql ?
bah si...
Regarde à la fin, il y a :
mysql_close($idReq);
Nous sommes entrain d'installer un forum sur le 60GP que j'ai souscrit (phpBB), nous avons 195 membres (héberger chez lycos mais en cours de transfert) et par moment 6/7 voir 10 personnes simultannés !
Cela voudrait dire, pas plus de 3 personnes connecté sur le forum ou bien 3 personnes qui poste en même temps ?
Plus de 3 requêtes en même temps...donc....
L.Boggio
19/03/2004, 10h46
lulu écrivait :
Plus de 3 requêtes en même temps...donc....
Donc, pas plus de 3 requêtes à la fois.
Quel que soit le forum utilisé, la connexion dure le temps d'extraire les informations, puis se ferme, qque soit le temps que le lecteur passe sur la page.
Merci Ludo.
Mes ... étaient pour Nonothx afin qu'il tire liu-même les conclusions de mon post.
Une petite précision, cependant :
J'ai lu, ici et là, que le mysql_close n'était pas indispensable car automatique à la fin de la requête.
Tu confirmes ou infirmes ??
L.Boggio
19/03/2004, 14h06
lulu écrivait :
Merci Ludo.
Mes ... étaient pour Nonothx afin qu'il tire liu-même les conclusions de mon post.
Une petite précision, cependant :
J'ai lu, ici et là, que le mysql_close n'était pas indispensable car automatique à la fin de la requête.
Tu confirmes ou infirmes ??
Presque... Ce n'est pas à la fin de la requête, mais à la fin du script qui a ouvert la connexion.
Ce ne serait pas le cas si on utilisait des persistent connectiosn (mysql_pconnect), mais elles sont désactivées chez OVH.
Néanmoins, sil est déconseillé de laisser faire la fin du script, car :
1) Si tu as du traitement derrière, cela laisse une connexion ouverte pour rien (1/3 de tes ressources, donc)
2) même si aujourd'hui tu n'as pas de traitement derrière, tu peux en rajouter demain et oublier de rajouter le mysql_connect.
3) C'est une bonne habitude à prendre ;-)
Bonjour
La seule solution c'est d'utiliser la base de donnée just le temps qu'il le faut.
Je conseille tout le monde d'executer TOUTES les requetes et se deconnecter de la base de données avant même d'envoyer les headers.
J'ai mit sur mon site un petit script qui calcule le temps d'execution des requetes, et le temps total de generation de l'html. Toutes mes requetes s'executent en 7% max du temps total de generation de la page... alors si la génération de la page prend 0.7s pourquoi occuper la base de donnée 0.7s secondes alors que 0.04s suffit !!
Personne ne sait pourquoi j'ai une erreur de temps en temps alors.....? :(
rderimay
05/09/2004, 14h30
Je ne sais pas pourquoi tu as un probleme de connection de temps en temps, mais si tu veux eviter qu'une erreur soit affichée, rajoute un @:
function execRequete($pRequete){
$ww1="sql";
$ww2="aze";
$ww3="";
$i=0;
do{
if(!$idReq = @mysql_connect($ww1,$ww2,$ww3)){sleep(1);}
$i++;
if($i>10){break;}
}while (!$idReq);
$result=mysql_select_db($dataBase);
$retour=mysql_query($pRequete);
mysql_close($idReq);
return $retour;
}
ça c'est fait, mais le problème c'est que cette technique est celle de l'autruche: on ne voit pas d'erreurs, mais ce n'est pas pour ça qu'il y en a pas...
Pour info, vous pouvez tester de quelle erreur il s'agit en testant le n° de l'erreur :
// Erreur de connexions simultanées = 1203
if (mysql_errno() == 1203) { ... }
vBulletin® v.3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org