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

Apache2.4+PHP8.2连接SQL Server多报错求助

Apache 2.4 + PHP 8.2 连接 SQL Server 故障排查请求

问题概述

使用Apache 2.4 + PHP 8.2连接SQL Server时遇到一系列问题:

  1. 调用mssql_connect()报错:

Fatal error: Uncaught Error: Call to undefined function mssql_connect() in D:\Apache24\htdocs\mcd\configsql.php:6 Stack trace: #0 {main} thrown in D:\Apache24\htdocs\mcd\configsql.php on line 6

  1. 已在D:\Apache24\php\php.ini中添加扩展:
extension=php_sqlsrv_82_ts_x64.dll
extension=php_pdo_sqlsrv_82_ts_x64.dll

扩展已在phpinfo()中正常显示。

  1. 改用sqlsrv_connect(),初始代码:
<?php
$myServer = "pcserver";
$myUser = "username";
$myPass = "password";
$myDB = "dbus";
$dbhandle = sqlsrv_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer");
$selected = sqlsrv_select_db($myDB, $dbhandle) or die("Couldn't open database $myDB");

报错:

Fatal error: Uncaught ArgumentCountError: sqlsrv_connect() expects at most 2 arguments, 3 given in D:\Apache24\htdocs\mcd\configsql.php:6 Stack trace: #0 D:\Apache24\htdocs\mcd\configsql.php(6): sqlsrv_connect('pcserver', 'username', 'password') #1 {main} thrown in D:\Apache24\htdocs\mcd\configsql.php on line 6

  1. 参考官方文档修改代码后仍连接失败,报错为SQLSTATE[08001]、SQL Server Error: 10060(无法连接到服务器)。

排查解决步骤

1. 关于mssql_connect()报错的说明

mssql_connect()是旧版SQL Server扩展函数,PHP 7.0后已被移除,PHP 8.2完全不支持,必须使用sqlsrv_connect()或PDO_SQLSRV扩展,无需再尝试该函数。

2. 修正sqlsrv_connect()参数错误

你第二次调用时传入3个参数,该函数仅接受2个参数:服务器名称 + 连接信息数组,后续参考官方文档修改的参数格式是正确的,此问题已解决。

3. 针对最终连接失败(错误10060)的排查

错误10060为TCP连接超时,说明PHP无法通过网络连接到SQL Server实例,按以下步骤逐一验证:

(1)检查SQL Server网络配置

  • 打开SQL Server配置管理器,确保目标实例的TCP/IP协议已启用。
  • 进入TCP/IP属性的IP地址标签:
    • 对应服务器IP(如192.168.0.1)的“已启用”设为“是”,默认实例需确保TCP端口为1433;命名实例需确认端口配置。
    • 若为命名实例,需启动SQL Server Browser服务(负责实例名与端口的映射)。

(2)验证服务器名称/IP格式

  • 默认实例:直接用IP或主机名,如"192.168.0.1"
  • 命名实例:格式为"主机名\实例名"或"IP\实例名",如"pcserver\SQLEXPRESS"
  • 自定义端口:格式为"IP,端口号",如"192.168.0.1,1434"

(3)测试网络连通性

在运行Apache/PHP的机器上打开命令提示符,执行:

telnet 192.168.0.1 1433

若无法连接,需排查:

  • SQL Server所在机器的防火墙是否允许对应端口的入站连接
  • 两台机器是否在同一局域网且能互相ping通
  • 远程服务器需确认公网IP/端口映射是否正确

(4)验证SQL Server登录权限

  • 确保使用的账号(如sa)已启用,且SQL Server允许SQL Server身份验证(默认可能仅启用Windows身份验证)。
  • 在SQL Server Management Studio中用该账号手动登录,确认能访问目标数据库mydbname。

(5)检查依赖组件兼容性

  • 确认php_sqlsrv扩展为TS(线程安全)版本,且与PHP的x64架构、8.2版本完全匹配。
  • 确保服务器已安装ODBC Driver 17 for SQL Server或更高版本(sqlsrv扩展依赖该驱动)。

(6)打印详细错误信息调试

修改代码输出更具体的错误:

<?php
$serverName = "192.168.0.1"; // 调整为正确的服务器/实例格式
$connectionInfo = array(
    "Database" => "mydbname",
    "UID" => "sa",
    "PWD" => "password",
    "ReturnDatesAsStrings" => true
);
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn) {
    echo "连接成功<br />";
} else {
    echo "连接失败<br />";
    $errors = sqlsrv_errors();
    foreach ($errors as $error) {
        echo "SQLSTATE: " . $error['SQLSTATE'] . "<br />";
        echo "错误代码: " . $error['code'] . "<br />";
        echo "错误信息: " . $error['message'] . "<br />";
    }
}
?>

根据详细错误定位问题,如登录失败会提示“Login failed for user 'sa'”。


内容的提问来源于stack exchange,提问作者Rudi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:26:01