web-dev-qa-db-fra.com

Définition d'un délai de connexion avec PDO

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.

24
gkres
$DBH = new PDO(
    "mysql:Host=$Host;dbname=$dbname", 
    $username, 
    $password,
    array(
        PDO::ATTR_TIMEOUT => 5, // in seconds
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    )
);
62
Shinto Joseph

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

7
gbuckingham89