You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP PDO ODBC连接超时设置不生效问题求助

问题:PDO设置1秒连接超时却实际耗时18秒生效

核心原因

PDO::ATTR_TIMEOUT是PDO层面对数据库操作的超时限制,并非底层ODBC驱动的连接阶段超时,所以对SQL Server ODBC驱动的初始连接无效。

解决方案

1. 在ODBC连接字符串中添加驱动级超时参数

针对ODBC Driver 18 for SQL Server,需要使用LoginTimeout参数直接控制连接登录的超时时间,这是驱动层面的设置,优先级更高。

  • 如果使用无DSN的连接方式,直接在连接字符串中指定参数;
  • 如果使用系统DSN,需在DSN配置里添加LoginTimeout=1。

2. 修改后的完整代码示例

<?php    
ini_set('display_errors', 1);
error_reporting(E_ALL);

$SERVER = "192.168.0.50";
$DATABASE = "MYDB";
const USERNAME = "username";
const PASSWORD = "password";

try {
    $db = new PDO(
        "odbc:Driver={ODBC Driver 18 for SQL Server};Server=$SERVER;Database=$DATABASE;LoginTimeout=1",
        USERNAME,
        PASSWORD,
        array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        )
    );
    
} catch (PDOException $e) {
    echo '<div class="alert alert-danger" role="alert">';
    echo "Connection to database failed:" . PHP_EOL . $e->getMessage();
    echo '</div>';
}

3. 额外说明

PDO::ATTR_TIMEOUT仅适用于连接建立后,执行查询、获取结果等数据库操作的超时控制,对初始连接的握手、登录阶段没有作用。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:22:47