PHP PDO连接失败引发警告,脚本执行超时


PHP PDO connection failure throws warning and script execution times out

我正在尝试实例化一个PDO对象,如下所示:

$this->pdo['pdo'] = new PDO('mysql:host=127.0.0.1;dbname=mydb;charset=UTF-8',
                    'myuser', 'my pass');

我想捕捉MySQL服务器不运行时会抛出的异常。

PHP.net说:"如果连接到请求的数据库的尝试失败,PDO::__construct()将抛出PDOException。"

但如果我关闭数据库服务器并运行脚本,我得到的只是一个警告:

Warning: PDO::__construct() [pdo.--construct]: [2002] 'A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.' in
C:'test'test.php on line 5
Fatal error: Maximum execution time of 60 seconds exceeded in C:'test'test.php 
on line 0

没有引发异常。

是否有一种直接的方法来捕捉错误(而无需临时设置自定义错误管理器功能?)

谢谢!

将数组配置作为PDO()的第四个参数:

PDO::setAttribute ( PDO::ATTR_TIMEOUT , '5' );  //> Secs

降低连接超时

PDO::setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

总是抛出Exception。

用法:

new PDO(,array(
              PDO::ATTR_TIMEOUT => "10",
              PDO::ATTR_ERRMODE =>  PDO::ERRMODE_EXCEPTION         
));

我也遇到了类似的问题。我终于解决了。

问题是,我在for/while循环中有一个"新的PDO('mysql:host=127.0.0.1;dbname=mydb','myser','my pass')"。

当我做3或4个循环时,一切都好。当我有5000次迭代时,我的mySQL服务器似乎阻止了我,然后我得到了"警告:PDO::__construct()[PDO.-construct]:[2002]'连接尝试失败…"错误消息。

我知道这不太聪明,不能把一个"新PDO(…)"放进一个循环。希望这能对你们有所帮助。

antoine