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

PHP连接Microsoft SQL Server遇HYT00登录超时错误求助

排查SQL Server连接超时(HYT00)问题

先看你的PHP代码里一个极易忽略的核心问题:PDO连接字符串用了单引号,导致变量无法被解析。PHP中,单引号包裹的字符串不会自动替换变量值,所以你的连接字符串实际是sqlsrv:Server=$server,1433; Database=$db,而非String.php里定义的真实服务器地址和数据库名。这大概率是连接失败的首要原因。

第一步:修复连接字符串的变量解析问题

把单引号改成双引号,或者用字符串拼接(更直观):

// 方法1:改用双引号(支持变量解析)
$this->db = new PDO("sqlsrv:Server=$server,1433; Database=$db", $user, $pass);

// 方法2:字符串拼接(避免引号歧义)
$this->db = new PDO('sqlsrv:Server=' . $server . ',1433; Database=' . $db, $user, $pass);

修复后先测试,如果仍超时,继续排查以下网络和配置问题。

第二步:检查Linux服务器到SQL Server的网络连通性

本地能正常连接说明数据库本身无问题,但Linux服务器的出站流量可能被拦截,或者Gearhost的SQL Server防火墙未允许你的服务器IP访问。

测试端口连通性

在Linux服务器上用telnet或nc(netcat)测试1433端口是否可达:

# 使用telnet
telnet your-sql-server-host 1433

# 或使用nc(若已安装)
nc -zv your-sql-server-host 1433

如果连接失败(如Connection refused或超时),说明:

  • 你的Linux服务器防火墙(如iptables、ufw)禁止了出站1433端口,需添加规则允许;
  • Gearhost的SQL Server防火墙未将你的Linux服务器IP加入白名单,需登录控制台添加允许的IP地址。

第三步:验证驱动与PHP版本的兼容性

你使用的是PHP7.0.30,需确保安装的ODBC Driver 17 for SQL Server、pdo_sqlsrv、sqlsrv驱动版本兼容。PHP7.0对应的sqlsrv驱动版本应为4.0.x至5.3.x(官方兼容矩阵)。

可通过以下方式查看已安装的驱动版本:

// 在PHP脚本中执行
print_r(PDO::getAvailableDrivers());
phpinfo();

查看输出中pdo_sqlsrv和sqlsrv的版本,确认与PHP7.0匹配。若版本不兼容,需卸载现有驱动,安装对应PHP7.0的适配版本。

第四步:尝试调整连接超时参数

网络延迟可能导致超时,可在连接字符串中增加超时参数:

$this->db = new PDO("sqlsrv:Server=$server,1433; Database=$db; ConnectionTimeout=30; LoginTimeout=30", $user, $pass);

延长超时时间后再次测试连接。

建议先从修复字符串变量解析问题入手,这是最快速见效的排查点。若修复后仍无法连接,再逐一验证网络和驱动兼容性问题。

内容的提问来源于stack exchange,提问作者Michele La Ferla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:11