Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1559 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Tester la connexion à X bases MySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tester la connexion à X bases MySQL

n°1621660
CaptainNem​o
Mobilis in Mobile
Posté le 10-10-2007 à 14:56:20  profilanswer
 

Bonjour à tous,
 
Mon objectif est de connaître l'état (lançée ou non) d'une liste de bases MySQL.
 
 
J'ai une table "bases" composée de 5 champs.
Id | serveur | login | mdp | base
 
0 | 192.168.0.2 | userX | mdpX | baseX
1 | 192.168.0.3 | userY | mdpY | baseY
2 | 192.168.0.4 | userZ | mdpZ | baseZ
 
Dans le code php, j'ai ceci

Code :
  1. $req = mysql_query("SELECT * from bases" )
  2. while($data = mysql_fetch_array($req))
  3. {
  4.     $var1 = mysql_connect($data[1],$data[2],$data[3]);
  5.     if($var1 == 1)
  6.       echo "Connexion réussie <br />";
  7.     else
  8.       echo "Connexion impossible <br />";
  9. }


 
Si les 3 bases sont allumées, pas de souci, j'aurais mes trois "Connexions réussie" l'un en dessous de l'autre.
 
Par contre si l'une des bases est éteinte, j'aurais un "Connexion Impossible", mais l'exécution s'arrêtera là.  
Cela me pose donc un problème au niveau fonctionnel, mais également au niveau design, car si le code est appelée en plein milieu d'une cellule d'un tableau, tout ce qui doit être affichée par la suite (les </td>, les </tr>, les </table> ) va être stoppée.
 
Voyez-vous un moyen de contournement ?
J'étais parti dans l'idée que mysql_connect renvoyer un true ou false en fonction de l'état de la connexion, mais pas que l'éxécution du code était stoppé net.
 
Voila, merci de vos éventuelles idées  :)  
 
 
 


---------------
All I wanna say is that they don't really care about us
mood
Publicité
Posté le 10-10-2007 à 14:56:20  profilanswer
 

n°1621666
Taz
bisounours-codeur
Posté le 10-10-2007 à 15:00:14  profilanswer
 

j'aimerais bien que tu m'explique comment ton fetch_array peut encore fonctionner après une première itération à moins que la nouvelle base ouverte ait elle même une tables bases...

n°1621671
CaptainNem​o
Mobilis in Mobile
Posté le 10-10-2007 à 15:03:48  profilanswer
 

Les X bases ont en effet tous la même table "bases".
Mais en effet un nouveau problème apparaîtra si les tables bases ne sont pas identiques :D
 
Bon dans cette optique, y'a-t-il un moyen de connaître l'état des bases listées dans le fetch sans passer par un mysql_connect ?
 
Edit : J'ai pensé au mysql_ping, mais pour qu'il joue son rôle (vérifier si la connexion est toujours présente) il faut déjà qu'il y'ait eu un mysql_connect lançé avec succès auparavant (enfin c'est ce que j'en ai déduit des scripts que j'ai vu).


Message édité par CaptainNemo le 10-10-2007 à 15:06:49

---------------
All I wanna say is that they don't really care about us
n°1621674
Taz
bisounours-codeur
Posté le 10-10-2007 à 15:08:18  profilanswer
 

je sais pas, je regarde l'API php mysql et je commence à penser que c'est de la merde parce qu'elle ne gère qu'une connexion globale...

n°1621681
CaptainNem​o
Mobilis in Mobile
Posté le 10-10-2007 à 15:16:31  profilanswer
 

Citation :

La connexion MySQL. S'il n'est pas spécifié, la dernière connexion ouverte avec la fonction mysql_connect() sera utilisée. Si une telle connexion n'est pas trouvée, la fonction tentera d'ouvrir une connexion, comme si la fonction mysql_connect() avait été appelée sans argument. Si aucune connexion n'est trouvée ou établie, une alerte E_WARNING est générée.


 
Apparement si mysql_ping ne trouve pas de mysql_connect, ca renvoit un warning sans interrompe le code ?
Ca pourrait être une alternative non ?


---------------
All I wanna say is that they don't really care about us
n°1621687
Taz
bisounours-codeur
Posté le 10-10-2007 à 15:20:35  profilanswer
 

bah non, puisqu'en fonction du contexte, ça ne fonctionnera pas pareil. Avec cette API, à part faire du CGI...

n°1621692
leflos5
On est ou on est pas :)
Posté le 10-10-2007 à 15:22:51  profilanswer
 

Pour parler clairement avec les termes adaptés ( :o ) tu veux savoir si plusieurs serveurs sont bien en ligne :??:
 
Rien n'interrompera ton code à part une erreur fatale, de code. Ca c'est à toi de le gérer. Pour ça faut que l'application tourne avec le niveau d'erreur le plus élevé (on affiche tout) pendant ton dev, et ensuite tu bascules en tu affiches rien et encore mieux tu les traites toi même :)
 
 
Mais au final tu veux savoit l'état des différents serveurs, ou savoir s'ils tournent tous, ou combien sont hs :??: Pour de l'affichage :??:

n°1621700
CaptainNem​o
Mobilis in Mobile
Posté le 10-10-2007 à 15:28:49  profilanswer
 

Oui je veux savoir si les serveurs sont en ligne.
Pour de l'affichage, avoir une liste du type
- Connexion impossible
- Connexion réussie
- Connexion réussie
 

Citation :

Rien n'interrompera ton code à part une erreur fatale, de code.


Ben c'est ça qui me semble louche, c'est qu'après test, si le mysql_connect foire, le code s'arrêtera là.
Un peu comme si je mettais un  $req = mysql_query() or die ();
Pour moi (:o jpeux me tromper) le code est bon, le problème se trouve au niveau du résultat renvoyé par mysql_connect. C'est soit true, soit va te faire foutre.


---------------
All I wanna say is that they don't really care about us
n°1621903
leflos5
On est ou on est pas :)
Posté le 10-10-2007 à 22:07:56  profilanswer
 

Bah normalement ça renvoit false en cas d'échec. Et tu ferais mieux de tester correctement et directement.
 
Il renvoit pas true ni 1 mais une ressource donc un truc défini qui passe peut être en tant que 1 mais qui ne l'est pas!
 
Donc encadre ta tentative de connexion par un if.
 
Par ailleurs je ferais pas de sortie à ce niveau mais construire un tableau  avec les resultats.
 
Et puis si juste pour vérifier que le serveur tourne et est accessible, y'a peut être pas besoin de tester une connexion au sgbd :??:
 
T'as tant de config à vérifier pour squater une table juste pour ça?
 
Enfin là c'est du code pas très propre qui fait que ça merde ;)
 
 
Une dernière piste: pourquoi ne pas tester la valeur de l'erreur? Ca pourrait peut être te dire que la connexion est refusée sans avoir à utiliser d'identifiant et donc de stocker des données sensibles (rien n'est hashé à ce que je comprends). Ou que l'hôte est ne répond pas...

n°1622139
Taz
bisounours-codeur
Posté le 11-10-2007 à 11:23:10  profilanswer
 

quelque soit le retour, c'est pourri. Si la connexion réussit ou échoue, il fait quoi l'appelant qui avait déjà une connexion ouverte ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Tester la connexion à X bases MySQL

 

Sujets relatifs
[resolu]Besoin d'aide pour jointure sur mySQL[MySQL] pb avec une requête et EXISTS
[resolu][java/mysql] restauration de dump[mysql] filtre: recherche de hausse de prix
PHP / MySQL Recherche d'images par mots-clésPHP / WAMP : version client API Mysql
Synchroniser tables de deux bases de données en VB.NETOptimisation requête (Mysql)
[Mysql 5] Connaitre le microtime de la date courante[mySQL] Pbr de rapidité d'execution d'une requete
Plus de sujets relatifs à : Tester la connexion à X bases MySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR