PHP 7.2+ 连接 SQL Server 2005/2008 配置与排错指南
本文详细介绍在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和
本文将先讲解基于遗留系统的
第一部分:旧版环境配置 (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。
第2步:配置 php.ini 启用 mssql 扩展
入口:php.ini 文件。
动作:
- 找到
extension_dir,确认路径指向包含 DLL 的目录(如./ext)。 - 取消注释
extension=php_mssql.dll。
风险提示:如果是手工安装的 PHP(非集成环境如 AppServ/WampServer),将
php_mssql.dll放置于系统目录后,可能需要重启操作系统而非仅重启 Web 服务器(Apache/IIS),因为某些 DLL 在系统启动时加载。
第3步:配置 SQL Server 网络协议
即使 PHP 端配置正确,如果 SQL Server 不监听 TCP/IP 端口,连接依然会超时或拒绝。
- 打开 SQL Server Configuration Manager(SQL Server 配置管理器)。
- 展开 SQL Server Network Configuration → Protocols for MSSQLSERVER(或其他实例名)。
- 右键启用 TCP/IP 和 Named Pipes。
- 双击 TCP/IP,进入 IP Addresses 选项卡。
- 滚动至最下方的 IPAll 区域,确保 TCP Port 设置为
1433。(注意:不要动动态端口 Dynamic Ports,除非你专门配置了动态映射)。 - 完成状态:必须重启 SQL Server 服务使更改生效。
第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);
?>
第二部分:常见问题排查 (FAQ)
问题1:Fatal error: Call to undefined function mssql_connect()
原因:PHP 未加载 php_mssql.dll 或 DLL 缺失。
解决方案:
- 检查
php.ini中是否已去除extension=php_mssql.dll前的分号。 - 确认
extension_dir指向的路径下确实存在该文件。 - 若路径正确但仍报错,尝试将
php_mssql.dll和ntwdblib.dll直接复制到C:\Windows\System32目录下,然后重启 Apache/IIS 或电脑。 - 注意:如果你的 PHP 版本是 7.0 及以上,
mssql扩展已不存在,此方法无效,请转至第三部分。
问题2:mssql_connect() Unable to connect to server
原因:网络不通、端口错误、认证失败或 DLL 版本不匹配。
解决方案:
- 检查服务:确认 SQL Server 服务正在运行。
- 检查协议:参照第一部分第3步,确保 TCP/IP 已启用且端口为 1433。
- 检查防火墙:确保服务器防火墙允许 1433 端口入站。
- 验证 IP/主机名:如果在不同机器上,尝试使用 IP 地址代替
localhost。若通过主机名连接不通,可在 PHP 所在机器的C:\Windows\System32\drivers\etc\hosts文件中添加 IP 映射。 - 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 数据库连接优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













