2010-11-18 3 views
2

Quelle est la meilleure façon de vérifier, à partir de PHP, si la connexion à un serveur MySQL va réussir? J'ai vu des solutions qui essayent d'abord d'ouvrir une connexion socket (avec fsockopen) et de se connecter à MySQL (via n'importe quelle extension que vous utilisez) seulement si la connexion socket a réussi. Je ne suis pas trop sûr à ce sujet puisque vous devez faire deux connexions à chaque fois, est-ce que ça martèle trop le serveur? Mon problème est que si mon serveur MySQL se bloque ou cesse de fonctionner pour quelque raison que ce soit, la page web ne fonctionne plus (elle se charge pendant longtemps et revient en général avec une erreur de timeout de la passerelle 504). Je voudrais afficher un message d'erreur facile à utiliser si MySQL n'est pas disponible. Cela permettrait également, espérons-le, d'éviter que MySQL soit encore plus malmené s'il est déjà en difficulté, car les nouveaux clients ne s'y connecteront pas tant que le serveur n'aura pas redémarré. J'utilise extension MySQLi si cela est pertinent.Vérifiez si le serveur MySQL est capable d'accepter les connexions

+0

devrait-il pas un temps de tentative de connexion mySQL relativement rapidement en cas d'échec? –

+0

dépend du paramètre connect_timeout – ajreal

Répondre

2

Ce que votre besoin est le MYSQLI_OPT_CONNECT_TIMEOUT préciser dans mysqli :: options details

+0

+ 1 cela semble être la bonne chose à modifier. –

+0

Ok, cela permet au temps mort d'arriver plus tôt. Mais je suis toujours inquiet qu'une connexion MySQLi soit plus chère pour un serveur MySQL qu'une vérification 'fsockopen'. Des pensées? –

+0

En utilisant le fsockopen, IMHO - Deux est supérieur à un. – ajreal

0
<?php 
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); 

/* 
* This is the "official" OO way to do it, 
* BUT $connect_error was broken until PHP 5.2.9 and 5.3.0. 
*/ 
if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' 
      . $mysqli->connect_error); 
} 

/* 
* Use this instead of $connect_error if you need to ensure 
* compatibility with PHP versions prior to 5.2.9 and 5.3.0. 
*/ 
if (mysqli_connect_error()) { 
    die('Connect Error (' . mysqli_connect_errno() . ') ' 
      . mysqli_connect_error()); 
} 

echo 'Success... ' . $mysqli->host_info . "\n"; 

$mysqli->close(); 
?> 

De http://www.php.net/manual/en/mysqli.connect.php

+0

Cela me donnera une erreur après l'extension MySqli attendra Dieu sait combien de temps pour essayer de se connecter. J'ai besoin de savoir si je serai capable de me connecter avant de faire un nouveau MySqli ... –

Questions connexes