J'utilise PDO pour extraire des données d'un serveur MySQL. Ce que j'ai remarqué, c'est ceci: si le serveur MySQL n'est pas disponible, il faut vraiment (relativement) long pour que ce code retourne une exception:
try {
$handle = new PDO($db_type . ':Host='.$db_Host.';dbname='.$db_name,$db_user,$db_pass);
// Tried using PDO::setAttribute and PDO::ATTR_TIMEOUT here
} catch(PDOException $e) {
echo $e->getMessage;
}
Dans le cas de MySQL, il faut un peu plus de 2 minutes pour que l'exception se produise (SQLSTATE [HY000] [2003] Impossible de se connecter au serveur MySQL sur ...) et 30 secondes sur PostgreSQL (SQLSTATE [08006] [7] le délai a expiré ).
J'ai essayé d'utiliser PDO :: setAttribute et PDO :: ATTR_TIMEOUT mais cela ne fonctionne pas. Ce qui, je suppose, a du sens, car le problème se produit avant cette déclaration.
Existe-t-il un moyen de définir un délai d'expiration pour la connexion à la base de données? 2 minutes/30 secondes me semblent vraiment longues pour que PDO se rende compte qu'il n'y a rien.
Je pense que j'ai vu cela se faire quelque part, mais je ne peux pas le retrouver pour la vie de moi.
$DBH = new PDO(
"mysql:Host=$Host;dbname=$dbname",
$username,
$password,
array(
PDO::ATTR_TIMEOUT => 5, // in seconds
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
J'utilise le pilote DBLIB pour PDO - et cela ne prend pas en charge le passage d'options (lance un avertissement).
Pour contourner ce problème, vous pouvez modifier le connection_timeout
paramètre dans le fichier de configuration FreeTDS qui se trouve à /etc/freetds/freetds.conf
(sur Ubuntu).