SQL Server连接失败求助:ODBC驱动协议不支持问题排查
针对你遇到的「SQL Server不支持请求协议」连接错误,除了你已做的排查,还可以检查以下几个关键点:
检查SQL Server实例的网络协议状态
打开SQL Server配置管理器,依次展开「SQL Server网络配置」→「SQLEXPRESS的协议」,确认TCP/IP和Named Pipes协议处于启用状态。如果禁用,右键启用后重启SQL Server服务。验证TCP/IP端口配置
在SQL Server配置管理器中双击TCP/IP协议,切换到「IP地址」标签,拉到最底部查看「IPAll」区域的TCP端口:- SQLEXPRESS默认使用动态端口,可通过「TCP动态端口」字段确认当前端口;也可手动指定固定端口(如1434)并重启服务。
- 用命令
netstat -ano | findstr "sqlservr"查看SQL Server进程实际监听的端口,确保和配置一致。
排查ODBC驱动兼容性与完整性
确认ODBC Driver 17 for SQL Server与你的SQL Server版本兼容(SQL Server 2012及以上版本支持该驱动);尝试卸载后重新安装对应版本的ODBC驱动,排除驱动损坏问题。检查IIS应用池身份权限
打开IIS管理器,找到网站对应的应用池,查看「高级设置」中的「标识」:- 默认的
ApplicationPoolIdentity可能没有SQL Server登录权限,可临时将标识改为「本地系统」测试连接;若能连接,再给IIS APPPOOL\你的应用池名称添加SQL Server登录权限。
- 默认的
验证实例名称与连接方式
- 用命令
sqlcmd -L列出本地SQL Server实例,确认DESKTOP-HRTJKQ7\SQLEXPRESS实例存在; - 尝试将代码中的
$serverName改为localhost\SQLEXPRESS或127.0.0.1\SQLEXPRESS,排除机器名解析问题。
- 用命令
检查PHP sqlsrv扩展状态
生成phpinfo页面,确认sqlsrv扩展已加载且版本与PHP 7.4匹配;若扩展未加载,检查php.ini中是否添加了extension=sqlsrv和extension=pdo_sqlsrv,且扩展文件路径正确。用ODBC数据源直接测试连接
打开Windows「ODBC数据源管理器(64位)」,创建系统DSN,选择ODBC Driver 17 for SQL Server,填入实例名、数据库后测试连接。若ODBC测试失败,说明问题出在SQL Server或驱动层面,与PHP代码无关。
内容的提问来源于stack exchange,提问作者Fifth Leg

