Windows11下PHP10连接SQL Server遇SQLSTATE[08001]超时错误求助
解决SQL Server TCP连接超时问题(SQLSTATE[08001])
1. 先验证网络连通性
- 测试服务器IP可达性:运行
ping <你的服务器IP>,确保能收到正常回复 - 测试1433端口开放:
- PowerShell执行:
Test-NetConnection <服务器IP> -Port 1433,查看TcpTestSucceeded是否为True - 或用telnet命令:
telnet <服务器IP> 1433,窗口变黑说明端口开放,否则提示连接失败
- PowerShell执行:
2. 检查SQL Server的网络配置
- 打开SQL Server配置管理器,依次展开
SQL Server网络配置->MSSQLSERVER的协议 - 确保
TCP/IP协议状态为启用,右键点击选择属性 - 切换到
IP地址标签,找到对应服务器的IP(公网/内网),设置已启用为是,TCP端口为1433 - 重启
SQL Server (MSSQLSERVER)服务,使配置生效
3. 修正连接字符串与框架配置
- 基础PDO测试(排除Laravel框架干扰):创建一个简单的PHP脚本测试连接
<?php try { $dsn = "sqlsrv:Server=你的服务器IP,1433;Database=你的数据库名"; $pdo = new PDO($dsn, "用户名", "密码"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功!"; } catch (PDOException $e) { die("连接失败: " . $e->getMessage()); } ?> - Laravel配置检查:
- 确认
.env文件里的DB_CONNECTION=sqlsrv,DB_HOST、DB_PORT=1433、DB_DATABASE、DB_USERNAME、DB_PASSWORD均正确 - 可在
config/database.php的sqlsrv连接配置中添加超时参数:'sqlsrv' => [ 'driver' => 'sqlsrv', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'options' => [ PDO::ATTR_TIMEOUT => 60, // 设置60秒连接超时 PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 60, // 设置60秒查询超时 ], ],
- 确认
4. 检查ODBC驱动兼容性
- 确认安装的ODBC Driver 17/18 for SQL Server与PHP位数一致(均为x64或x86)
- 若当前使用ODBC 17,尝试升级到最新的ODBC Driver 18,解决部分兼容性问题
5. 防火墙规则排查
- 本地Windows防火墙:允许Web服务器(Apache/Nginx)或PHP进程出站访问1433端口
- 服务器端防火墙:添加入站规则,允许你的Windows 11机器IP访问1433端口
- 云服务器安全组:如果是Azure/AWS等云主机,需在安全组中开放1433端口给你的公网IP
内容的提问来源于stack exchange,提问作者Saddam Aziz Irfana
相关产品推荐
相关产品推荐

