PHP7.2使用sqlsrv_connect连接MS SQL Server失败求助
排查PHP7.2连接MS SQL Server失败的问题
我来帮你一步步梳理可能的问题点,结合你的环境和代码,常见的故障原因大概有这些:
1. 服务器名称的拼写与实例名验证
先看你的代码里$serverName = "severname\MSSQLSERVER"——这里是不是打错了?应该是servername(少了个字母r)?如果是笔误,那肯定连不上。另外:
- 如果你的SQL Server是默认实例,其实可以直接写服务器IP/主机名,不用加
\MSSQLSERVER; - 如果是命名实例,要把
MSSQLSERVER改成实际的实例名(比如常见的SQLEXPRESS)。
2. 驱动与PHP版本的兼容性
你安装的Microsoft Drivers 5.2 for PHP确实支持PHP7.2,但要注意:
- 驱动的线程安全(TS)/非线程安全(NTS)版本必须和你的PHP完全匹配。可以通过
phpinfo()查看PHP的线程安全状态,再确认驱动是否对应; - 检查ODBC Driver 17是否正确安装:打开系统的「ODBC数据源管理器」,在「驱动」标签页里能看到
ODBC Driver 17 for SQL Server才说明安装成功。
3. 连接参数的正确性
- 确认
UID和PWD是SQL Server的SQL登录账号(不是Windows本地账号),如果想用Windows集成身份验证,要修改连接数组:$conn_array = array( "Database" => "databasename", "Authentication" => SQLSRV_AUTH_WINDOWS ); - 检查
databasename的拼写是否正确,同时确认这个SQL账号有访问该数据库的权限(可以在SQL Server Management Studio里测试登录并查看权限)。
4. 网络与防火墙限制
- 确认SQL Server所在服务器的防火墙开放了对应端口:默认实例是1433(TCP),命名实例需要开放UDP 1434端口(供SQL Server Browser服务使用);
- 在PHP服务器上测试连通性:用
telnet 你的服务器IP 1433或者PowerShell命令Test-NetConnection 你的服务器IP -Port 1433,如果连不通,说明网络有问题。
5. PHP扩展加载情况检查
- 打开
php.ini文件,确认已经启用了sqlsrv和pdo_sqlsrv扩展:extension=sqlsrv extension=pdo_sqlsrv - 重启你的Web服务器(Apache/Nginx/IIS),然后通过
phpinfo()页面查看是否有sqlsrv的相关配置项,确认扩展已经成功加载。
6. 利用错误信息精准定位
你已经用sqlsrv_errors()输出错误,把具体的错误内容贴出来会更高效。比如常见的错误类型:
- 「找不到服务器或实例」:大概率是服务器名称、端口或网络的问题;
- 「登录失败」:账号密码错误或权限不足;
- 「驱动相关错误」:扩展未加载或版本不兼容。
内容的提问来源于stack exchange,提问作者John Doesoph




