Setting a connect timeout with PDO(使用 PDO 设置连接超时)
问题描述
我正在使用 PDO 从 MySQL 服务器获取数据.我注意到的是:如果 MySQL 服务器不可用,这段代码需要真的(相对)很长时间才能返回异常:
I'm using PDO to get data off a MySQL server. What I noticed is this: if the MySQL 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;
}
在 MySQL 的情况下,异常发生只需要 2 分钟多一点(SQLSTATE[HY000] [2003] Can't connect to MySQL server on...)和 30 秒在 PostgreSQL (SQLSTATE[08006] [7] 超时已过期).
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).
我尝试使用 PDO::setAttribute 和 PDO::ATTR_TIMEOUT 但它不起作用.我想这是有道理的,因为问题发生在此语句之前.
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.
有没有办法设置连接数据库的超时时间?2 分钟/30 秒对我来说似乎很长,让 PDO 意识到那里什么都没有.
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.
推荐答案
$DBH = new PDO(
"mysql:host=$host;dbname=$dbname",
$username,
$password,
array(
PDO::ATTR_TIMEOUT => 5, // in seconds
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
这篇关于使用 PDO 设置连接超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 PDO 设置连接超时
基础教程推荐
- 如何在 Laravel 中使用 React Router? 2022-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 如何替换eregi() 2022-01-01
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01
- 在PHP中根据W3C规范Unicode 2022-01-01
