Setting a connect timeout with PDO

匿名 (未验证) 提交于 2019-12-03 02:12:02

问题:

I'm using PDO to get data off SQL server. What I noticed is this: if the SQL server is unavailable, it takes really (relatively) long for this code to return an 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; }

In case of MySQL it takes just over 2 minutes for the exception to occur (SQLSTATE[HY000] [2003] Can't connect to MySQL server on...) and 30 seconds on PostgreSQL (SQLSTATE[08006] [7] timeout expired).

I tried using PDO::setAttribute and PDO::ATTR_TIMEOUT but it's not working. Which I guess makes sense, since the problem occurs before this statement.

Is there a way to set a timeout for connecting to the DB? 2 minutes/30 seconds seems really long to me for PDO to realize there is nothing there.

I think I saw this being done somewhere, but can't find it again for the life of me.

回答1:

$DBH = new PDO(     "mysql:host=$host;dbname=$dbname",      $username,      $password,     array(         PDO::ATTR_TIMEOUT => "Specify your time here (seconds)",         PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION     ) );


回答2:

I'm using the DBLIB driver for PDO - and that doesn't support the passing of options (throws a warning).

To get round this, you can edit the connection_timeout setting in the FreeTDS config file which is located at /etc/freetds/freetds.conf (on Ubuntu).



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!