PHP 7.2+ 连接 SQL Server 2005/2008 配置与排错指南

阿橙
阿橙
发布时间:2026-10-15 | 3人浏览过
原创

本文详细介绍在PHP环境中连接SQL Server 2005/2008的方法,包括旧版PHP通过替换ntwdblib.dll启用mssql扩展的配置,以及新版PHP转向官方Microsoft Drivers(pdo_sqlsrv)的标准方案,附带连接失败的常见原因排查。

PHP连接SQL Server的核心差异

PHP连接Microsoft SQL Server的方式经历了显著的技术迭代。对于运行在 Windows + Apache/IIS + PHP 的经典环境,早期版本依赖 mssql_*mssql扩展已被移除;PHP 7.2开始,sqlsrv和成为微软官方推荐的现代连接方式。

本文将先讲解基于遗留系统的配置(涉及ntwdblib.dll),随后介绍更稳定可靠的现代方案。

第一部分:旧版环境配置 (PHP < 7.2)

如果你必须维护旧的代码库,通常遇到的是调用 mssql_connect() 失败的问题。核心痛点在于客户端DLL版本与SQL Server版本的匹配。

第1步:准备正确的 ntwdblib.dll 文件

目的:解决连接建立时的底层协议握手失败问题。 关键事实:默认的 ntwdblib.dll 版本往往无法正确连接 SQL Server 2005/2008。必须替换为对应版本的 DLL。

  • SQL Server 2000 通常需要版本 2000.80.194.0 或更低(注意:网上流传的“2000.2.8.0”说法并不准确,实验证明 2000.80.194.0 能更好地兼容 2005)。
  • 操作:确保你的 PHP 目录中存在正确版本的 ntwdblib.dll。
image

第2步:配置 php.ini 启用 mssql 扩展

入口:php.ini 文件。 动作:

  1. 找到 extension_dir,确认路径指向包含 DLL 的目录(如 ./ext)。
  2. 取消注释 extension=php_mssql.dll。
image image image

风险提示:如果是手工安装的 PHP(非集成环境如 AppServ/WampServer),将 php_mssql.dll 放置于系统目录后,可能需要重启操作系统而非仅重启 Web 服务器(Apache/IIS),因为某些 DLL 在系统启动时加载。

第3步:配置 SQL Server 网络协议

即使 PHP 端配置正确,如果 SQL Server 不监听 TCP/IP 端口,连接依然会超时或拒绝。

  1. 打开 SQL Server Configuration Manager(SQL Server 配置管理器)。
  2. 展开 SQL Server Network Configuration → Protocols for MSSQLSERVER(或其他实例名)。
  3. 右键启用 TCP/IP 和 Named Pipes。
  4. 双击 TCP/IP,进入 IP Addresses 选项卡。
  5. 滚动至最下方的 IPAll 区域,确保 TCP Port 设置为 1433。(注意:不要动动态端口 Dynamic Ports,除非你专门配置了动态映射)。
  6. 完成状态:必须重启 SQL Server 服务使更改生效。
image image

第4步:测试连接代码

使用以下经典代码进行连通性测试。请将 server_name、username 和 password 替换为你的实际凭据。

<?php
// 连接数据库
$conn = mssql_connect('localhost', 'sa', 'your_password');
if (!$conn) {
    die('连接失败: ' . mssql_get_last_message());
}

// 选择数据库
mssql_select_db('database_name', $conn);

// 执行查询
$Query = "SELECT * FROM table_name";
$AdminResult = mssql_query($Query);

// 输出结果
$Num = mssql_num_rows($AdminResult);
for ($i = 0; $i < $Num; $i++) {
    $Row = mssql_fetch_array($AdminResult);
    echo $Row[0] . "<br>"; // 根据实际列索引调整
}

// 关闭连接
mssql_close($conn);
?>
image

第二部分:常见问题排查 (FAQ)

问题1:Fatal error: Call to undefined function mssql_connect()

原因:PHP 未加载 php_mssql.dll 或 DLL 缺失。

解决方案:

  1. 检查 php.ini 中是否已去除 extension=php_mssql.dll 前的分号。
  2. 确认 extension_dir 指向的路径下确实存在该文件。
  3. 若路径正确但仍报错,尝试将 php_mssql.dll 和 ntwdblib.dll 直接复制到 C:\Windows\System32 目录下,然后重启 Apache/IIS 或电脑。
  4. 注意:如果你的 PHP 版本是 7.0 及以上,mssql 扩展已不存在,此方法无效,请转至第三部分。

问题2:mssql_connect() Unable to connect to server

原因:网络不通、端口错误、认证失败或 DLL 版本不匹配。

解决方案:

  1. 检查服务:确认 SQL Server 服务正在运行。
  2. 检查协议:参照第一部分第3步,确保 TCP/IP 已启用且端口为 1433。
  3. 检查防火墙:确保服务器防火墙允许 1433 端口入站。
  4. 验证 IP/主机名:如果在不同机器上,尝试使用 IP 地址代替 localhost。若通过主机名连接不通,可在 PHP 所在机器的 C:\Windows\System32\drivers\etc\hosts 文件中添加 IP 映射。
  5. DLL 版本校验:再次确认 ntwdblib.dll 是否为 2000.80.194.0 或更高兼容版本。版本过低会导致连接建立阶段中断。

第三部分:推荐方案 —— 使用 pdo_sqlsrv (PHP 7.2+)

鉴于 mssql 扩展的弃用和维护困难,对于新开发或迁移项目,强烈建议使用 Microsoft 官方提供的 SQLSRV 驱动或 PDO_SQLSRV。

1. 安装扩展

访问 Microsoft 官网下载与你 PHP 版本(TS/NTS, x86/x64)匹配的 php_sqlsrv.dll 和 php_pdo_sqlsrv.dll。

2. 配置 php.ini

将下载的 DLL 放入 ext 目录,并在 php.ini 中添加:

extension=php_sqlsrv.dll
extension=php_pdo_sqlsrv.dll

3. 连接示例

<?php
$serverName = "localhost,1433";
$connectionOptions = array(
    "Database" => "database_name",
    "Uid" => "sa",
    "PWD" => "your_password"
);
$conn = sqlsrv_connect($serverName, $connectionOptions);

if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
} else {
    echo "连接成功!";
}
sqlsrv_close($conn);
?>

总结

PHP 连接 SQL Server 的关键在于环境的一致性。旧版环境(PHP 5.x)受限于 ntwdblib.dll 的版本兼容性,需仔细匹配 DLL 并启用 TCP/IP;而现代环境应直接采用 pdo_sqlsrv 以获得更好的性能和安全性。在遇到 Call to undefined function 或 Unable to connect 时,优先检查扩展加载状态和网络端口可达性。

以上就是 PHP 连接 SQL Server 2005/2008 的实现方法与排错指南的详细内容,更多关于 PHP 数据库连接优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表