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

Ubuntu20.04下PHP7.4 PDO连接SQLServer2005报01002错误如何解决

PDO dblib连接SQL Server 2005报01002错误排查方案

报错SQLSTATE[01002] Adaptive Server connection failed属于通用连接层错误,按以下顺序逐层排查:

1. 基础网络连通性校验

首先排除网络层拦截问题,在Ubuntu 20.04服务器上执行端口探测命令:

nc -zv 10.10.10.10 1433
  • 如果返回连接超时/拒绝,优先排查三点:
    • 数据库服务器本地防火墙、网络安全组是否放通1433端口,且允许当前Ubuntu服务器的IP访问
    • 登录SQL Server 2005服务器,打开SQL Server配置管理器,确认TCP/IP协议已启用——SQL Server 2005默认安装时TCP/IP是禁用状态,仅支持命名管道连接,启用后需要重启SQL Server服务生效
    • 如果是命名实例,不要默认用1433端口,在SQL Server配置管理器的TCP/IP属性里查看实例实际监听的动态端口,替换连接串里的端口值
  • 如果nc返回端口连通正常,继续排查驱动配置问题。

2. 修正freetds驱动的TDS协议版本

Ubuntu下PHP的dblib扩展依赖freetds驱动连接SQL Server,默认配置的TDS协议版本过高,无法兼容SQL Server 2005:

  1. 执行命令查看freetds配置文件路径:
php -i | grep freetds

通常配置文件路径为/etc/freetds/freetds.conf
2. 编辑配置文件,找到[global]配置段,修改TDS版本为适配SQL Server 2005的7.0版本:

[global]
    tds version = 7.0
    text size = 64512

TDS 7.2及以上版本仅适配SQL Server 2008及更新版本,版本不匹配会直接握手失败,报当前的连接错误
3. 保存配置后直接重跑PHP脚本即可,不需要重启PHP或freetds服务。

3. 调整PDO连接参数兼容老版本数据库

如果改完全局配置还是报错,在PDO连接串里显式指定TDS版本、关闭不兼容的加密配置,修改连接代码如下:

<?php
function pdoOnLine() {
    global $pdo;
    $pdo = new PDO('dblib:host=10.10.10.10:1433;dbname=test;charset=utf8;tds_version=7.0', 'test', 'test', [
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);
}

try {
    pdoOnLine();  
} catch (\PDOException $e) {
    // 调试阶段直接打印完整错误上下文,方便定位具体问题
    var_dump($e->getMessage(), $e->getCode());
    exit;
}
?>

4. 账号与数据库配置校验

网络、驱动配置都正常的情况下,检查数据库侧配置:

  • 确认SQL Server 2005开启了混合身份认证模式,默认安装时仅开启Windows身份认证,SQL账号无法登录
  • 确认test账号密码正确,未被锁定,且拥有test库的对应访问权限
  • 检查SQL Server 2005是否开启了强制连接加密,老版本freetds不支持高版本TLS协议,会直接握手失败,关闭强制加密即可正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:18:49