我试图像这样实例化一个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
没有抛出异常。
是否有直接的方法来捕获错误(没有临时设置自定义错误管理器功能的麻烦?)
谢谢!
答案 0 :(得分:4)
将数组配置作为PDO()的第4个参数传递:
PDO::setAttribute ( PDO::ATTR_TIMEOUT , '5' ); //> Secs
降低连接超时
和
PDO::setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
始终抛出异常。
用法:
new PDO(,array(
PDO::ATTR_TIMEOUT => "10",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
));
答案 1 :(得分:0)
我有类似的问题。我最终解决了它。
问题是,我有一个“新的PDO('mysql:host = 127.0.0.1; dbname = mydb','myuser','my pass');”进入for / while循环。
当我做3或4次循环时,它没问题。当我有5000次迭代时,我的mySQL服务器似乎阻止了我,然后我得到“警告:PDO :: __ construct()[pdo .-- construct]:[2002]'连接尝试失败...”错误消息。
我知道将“新PDO(...”)放入循环并不太聪明。希望这会对你们有所帮助。
安托