求助:SQLSRV PDO无法连接远程SQL Server(登录超时)
解决Ubuntu环境下PDO SQLSRV连接远程SQL Server超时的问题
我之前在Ubuntu服务器部署项目时,也碰到过和你完全一样的「SQLSTATE[HYT00]登录超时」问题,结合你的环境配置,给你几个逐步排查的方向:
1. 先排查网络连通性(最常见的根因)
登录你的DigitalOcean Ubuntu服务器,先直接测试和远程SQL Server的网络通路:
- 用telnet测试端口(默认SQL Server端口是1433,自定义端口请替换):
如果提示「Connection refused」或一直卡住,说明网络层面不通,接下来检查:telnet <你的SQL Server IP> 1433- 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 - 验证驱动是否正确注册:
输出里应该能看到「ODBC Driver 17 for SQL Server」的条目。odbcinst -q -d
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_sqlsrvphp.ini中的扩展引入语句。 - 适当调大PHP的连接超时参数:
编辑你的php.ini文件,添加或修改:
修改后重启NGINX和PHP-FPM使配置生效:pdo_sqlsrv.connection_timeout = 30sudo service nginx restart sudo service php7.1-fpm restart
5. 确认SQL Server的登录模式
确保你的SQL Server设置为混合身份验证模式(SQL Server + Windows身份验证),如果是纯Windows身份验证,用SQL账号登录必然失败。修改后需要重启SQL Server服务生效。
内容的提问来源于stack exchange,提问作者FlashJordan
相关产品推荐
相关产品推荐

