PHP连接SQL Server异常:本地IP连接失败+远程ODBC驱动缺失
SQL Server远程连接PHP脚本问题排查求助
问题背景
我有一段用于连接SQL Server的PHP脚本,分别部署在服务器本地和远程主机上,目标是实现远程连接SQL Server。脚本代码如下:
//SET CONNECTION TO MSQL $serverName = ""; $uid = "user"; $pwd = "password"; $databaseName = "database"; //BUILD CONNECTION ARRAY $connectionInfo = array( "UID"=>$uid, "PWD"=>$pwd, "Database"=>$databaseName); /* Connect using SQL Server Authentication. */ $conn = sqlsrv_connect( $serverName, $connectionInfo); //TEST CONNECTION if( $conn ) { echo "Connection established.<br />"; }else{ echo "Connection could not be established.<br />"; die( print_r( sqlsrv_errors(), true)); }
本地连接异常情况
本地运行时,设置$serverName = "SRV\SQLEXPRESS";可正常连接;改为本地IP后连接失败,报错:
Connection could not be established.
Array ( [0] => Array ( [0] => 08001 [SQLSTATE] => 08001 [1] => 2 [code] => 2 [2] => [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server
远程主机问题
已确认端口开放、防火墙允许本地及远程连接,但远程主机运行脚本时提示找不到ODBC驱动。
已尝试操作
经尝试设置$serverName = "tcp:192.168.0.242, 51484";后本地可连接,但SQL配置管理器显示默认端口为1433;通过公网IP远程连接仍提示ODBC驱动缺失,求助排查问题及测试方向。
排查方向与测试建议
一、本地IP连接失败问题
- 检查SQL Server的TCP/IP协议是否启用:打开SQL Server配置管理器,展开SQL Server网络配置,找到对应实例的协议,确保TCP/IP状态为已启用。
- 修正端口连接字符串:注意
tcp:格式的连接字符串中,端口号前不要加空格,应改为tcp:192.168.0.242,51484。 - 确认TCP端口配置:在TCP/IP属性的IP地址标签中,查看IPAll的TCP端口是否为实际监听的端口(51484),而非配置管理器显示的默认1433。
二、远程主机ODBC驱动缺失问题
- 安装匹配版本的ODBC驱动:远程主机必须安装Microsoft ODBC Driver 17 for SQL Server(与本地使用的驱动版本一致),根据系统架构(32/64位)选择对应安装包。
- 验证PHP扩展状态:在远程主机上执行
phpinfo(),检查sqlsrv扩展是否正常加载,且版本与ODBC驱动兼容。 - 测试远程网络连通性:在远程主机上用
telnet 公网IP 端口或PowerShell命令Test-NetConnection 公网IP -Port 端口,确认能正常连通SQL Server的监听端口。
三、端口不一致问题
- 查询SQL Server实际监听端口:在SQL Server实例上执行以下SQL语句,获取当前实例的实际TCP端口:
SELECT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID; - 用系统命令验证端口:在SQL Server所在服务器执行
netstat -ano | findstr "sqlservr.exe",找到对应进程的监听端口,确认是否为51484。
内容的提问来源于stack exchange,提问作者Björn C
相关产品推荐
相关产品推荐

