Tester la connexion à X bases MySQL

Tester la connexion à X bases MySQL - PHP - Programmation

Marsh Posté le 10-10-2007 à 14:56:20    

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  :)  
 
 
 

Reply

Marsh Posté le 10-10-2007 à 14:56:20   

Reply

Marsh Posté le 10-10-2007 à 15:00:14    

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...

Reply

Marsh Posté le 10-10-2007 à 15:03:48    

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 Profil supprimé le 10-10-2007 à 15:06:49
Reply

Marsh Posté le 10-10-2007 à 15:08:18    

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...

Reply

Marsh Posté le 10-10-2007 à 15:16:31    

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 ?

Reply

Marsh Posté le 10-10-2007 à 15:20:35    

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

Reply

Marsh Posté le 10-10-2007 à 15:22:51    

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 :??:

Reply

Marsh Posté le 10-10-2007 à 15:28:49    

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.

Reply

Marsh Posté le 10-10-2007 à 22:07:56    

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...

Reply

Marsh Posté le 11-10-2007 à 11:23:10    

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 ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed