PHP PDO连接失败抛出警告,脚本执行超时
我试图实例化一个PDO对象是这样的:PHP 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()的第四PARAM:
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
));
因此,实例化应该是: '$ this-> pdo ['pdo'] = new PDO('mysql:host = 127.0.0.1; dbname = mydb; charset = UTF-8','myuser','my通过',数组(PDO :: ATTR_TIMEOUT =>“10”)); ' –
谢谢!工作正常! –
PDO :: setAttribute()是否静态工作? –
我有一个类似的问题。我最终解决了它。
事情是,我有一个“新的PDO('mysql:host = 127.0.0.1; dbname = mydb','myuser','我的通行证');”进入for/while循环。
当我做3或4循环,它是好的。当我有5000次迭代时,我的mySQL服务器似乎阻止了我,然后我得到了“Warning:PDO :: __ construct()[pdo .-- construct]:[2002]'连接尝试失败...'错误消息。
我知道这是不是太聪明,把一个“新PDO(...”进入一个循环。希望这会帮助你们。
安东尼
这是一种解决方法,而不是解决方案,但感谢分享它。 –
我认为这个问题要么是php引擎,要么是几乎同时打开500个连接的mysql。由于我在同一个DB上使用同一个用户进行了所有查询,所以我不需要打开新的连接。我认为这个问题与mysql服务器的重载有关,或者可能是一次针对同一个源的太多请求的保护。那么,除了解决了我的问题之外,我不多。 :) – antoine
执行时间超过了一个致命的错误如果可能的话,只要将“重要”位放入错误处理程序,人们可以轻松地绕过时间限制并运行脚本。 –
我刚刚发现解决方案: ' $ this-> pdo ['pdo'] = new PDO('mysql:host = 127.0.0.1; dbname = mydb; charset = UTF-8','myuser','my pass',array(PDO :: ATTR_TIMEOUT = >“10”));' 最后一个参数(attributes数组)允许我指定一个比PHP的最大执行时间短的超时。然后异常抛出确定。 –