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

求助:SQLSRV PDO无法连接远程SQL Server(登录超时)

解决Ubuntu环境下PDO SQLSRV连接远程SQL Server超时的问题

我之前在Ubuntu服务器部署项目时,也碰到过和你完全一样的「SQLSTATE[HYT00]登录超时」问题,结合你的环境配置,给你几个逐步排查的方向:

1. 先排查网络连通性(最常见的根因)

登录你的DigitalOcean Ubuntu服务器,先直接测试和远程SQL Server的网络通路:

  • 用telnet测试端口(默认SQL Server端口是1433,自定义端口请替换):
    telnet <你的SQL Server IP> 1433
    
    如果提示「Connection refused」或一直卡住,说明网络层面不通,接下来检查:
    • DigitalOcean防火墙规则:确保出站方向允许访问1433端口(或你的自定义端口);
    • 远程SQL Server本地防火墙:确认已将Ubuntu服务器IP加入允许列表,开放对应端口;
    • SQL Server远程连接配置:在SQL Server配置管理器中,开启TCP/IP协议并确认监听端口正确。

2. 验证ODBC驱动的兼容性

Ubuntu 16.04搭配PHP7.1时,ODBC Driver 13可能存在兼容性问题,建议换成更稳定的ODBC Driver 17:

  • 先卸载旧驱动:
    sudo apt-get remove msodbcsql
    
  • 安装ODBC Driver 17:
    sudo apt-get install msodbcsql17
    
  • 验证驱动是否正确注册:
    odbcinst -q -d
    
    输出里应该能看到「ODBC Driver 17 for SQL Server」的条目。

3. 用原生工具排除PHP层面问题

先脱离PHP环境,用sqlcmd直接测试连接,确认SQL Server本身的登录逻辑没问题:

sqlcmd -S <你的SQL Server IP>,<端口> -U <SQL账号> -P <密码>

如果sqlcmd能成功登录并执行命令,那问题大概率出在PHP的配置或代码里;如果sqlcmd也超时,继续回到网络或SQL Server的配置排查。

4. 检查PHP的扩展和配置

  • 确认PDO SQLSRV扩展已正确加载:
    php -m | grep pdo_sqlsrv
    
    有输出说明扩展加载成功,无输出则需重新安装扩展并检查php.ini中的扩展引入语句。
  • 适当调大PHP的连接超时参数:
    编辑你的php.ini文件,添加或修改:
    pdo_sqlsrv.connection_timeout = 30
    
    修改后重启NGINX和PHP-FPM使配置生效:
    sudo service nginx restart
    sudo service php7.1-fpm restart
    

5. 确认SQL Server的登录模式

确保你的SQL Server设置为混合身份验证模式(SQL Server + Windows身份验证),如果是纯Windows身份验证,用SQL账号登录必然失败。修改后需要重启SQL Server服务生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:11:31