PHP 连接 MSSQL 2008/2005:SQLSRV 驱动配置与使用指南

半杯拿铁
半杯拿铁
发布时间:2026-10-14 | 4人浏览过
原创

本文将详细介绍如何在 PHP 环境中配置并连接 Microsoft SQL Server 2008/2005 数据库。由于新版 SQL Server 不再支持旧的 mssql 扩展,我们需要安装微软官方的 SQLSRV 驱动。内容包含驱动下载、环境配置及具体的代码调用示例。

结果或目标

在完成本文的配置后,你的 PHP 程序将能够通过 SQLSRV 驱动成功连接到 SQL Server 2008/2005 实例,并能够执行基本的 CRUD(增删改查)操作,特别是针对老旧系统的兼容性问题。

准备条件

  • 一台已运行 PHP 和 Apache/Nginx 的服务器(常见环境如 WAMP/XAMPP)。
  • 目标 SQL Server 2008 或 2005 数据库服务器的访问权限。
  • 需要确认 PHP 的版本号(如 5.2.x, 5.3.x)以及线程安全情况(TS vs NTS)和编译器版本(VC6 vs VC9)。

真实操作顺序

第 1 步:下载 SQLSRV 驱动程序

MSSQL 2008/2005 无法使用旧的 php_mssql.dll,必须使用微软提供的专用驱动包。你可以前往微软官方下载中心,搜索 “Microsoft Drivers for PHP for SQL Server” (ID: 20098)。

下载后解压安装包(通常是一个 .msi 安装程序或 .zip 包),你会获得一组 .dll 文件。这些文件名遵循特定的命名规则,你需要根据实际环境挑选:

  • 前缀: php_sqlsrv_ (直接使用驱动) 或 php_pdo_sqlsrv_ (通过 PDO 使用)。
  • 中间数字: 代表支持的 PHP 版本,例如 52 对应 PHP 5.2,53 对应 PHP 5.3。
  • 后缀: _nts (非线程安全) 或 _ts (线程安全);_vc6 或 _vc9 代表编译器版本。

提示:如果你不清楚自己的环境配置,可以尝试在 PHP 页面输出 phpinfo() 查看详细的 Thread Safety 和 Compiler 信息。

第 2 步:复制 DLL 文件至扩展目录

将你在上一步选定的两个 .dll 文件(一个 sqlsrv,一个 pdo_sqlsrv)复制到 PHP 的 ext 目录下。

典型路径如下:

  • C:\wamp\bin\php\php5.2.6\ext\
  • /usr/lib/php/modules/ (Linux 系统)

第 3 步:修改 php.ini 配置文件

打开你的 php.ini 文件(可通过 phpinfo() 查找其加载位置),找到动态扩展部分 ([Dynamic Extensions]),添加以下两行代码,确保文件名与你实际下载的完全一致:

; 加载标准 SQLSRV 驱动
extension=php_sqlsrv_52_ts_vc6.dll
; 加载 PDO 对应的 SQLSRV 驱动
extension=php_pdo_sqlsrv_52_ts_vc6.dll

同时,建议启用基础的 PDO 功能以增强兼容性,找到 ;extension=pdo.dll,去掉前面的分号 ; 进行开启。

保存文件后,务必**重启 Web 服务器**(Apache/IIS)以使更改生效。

第 4 步:编写连接与查询代码 (PDO 模式)

配置成功后,我们可以编写简单的 PHP 脚本测试连接。这里展示如何使用 PDO 风格的方式连接数据库:

<?php
// 定义连接参数
$serverName = "ServerName\\InstanceName"; // 注意双反斜杠转义
$connectionInfo = array(
    "Database" => "DatabaseName",
    "UID" => "sa",
    "PWD" => "your_password"
);

// 尝试建立连接
$conn = sqlsrv_connect($serverName, $connectionInfo);

if( $conn ) {
    echo "连接成功!<br />";
} else {
    echo "连接失败!<br />";
    die( print_r( sqlsrv_errors(), true));
}

// 执行简单查询
$sql = "SELECT * FROM your_table_name";
$stmt = sqlsrv_query($conn, $sql);

if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}

// 遍历结果
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    echo $row['column_name'] . "<br />";
}

// 释放资源
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>

第 5 步:封装通用的数据库操作类(进阶示例)

在实际项目中,直接散落 SQL 语句并不利于维护。下面提供一个简单的 DB 类封装,方便处理连接复用和数据获取:

class DB {
    private $con = null;

    function __construct($dbhost, $dbuser, $dbpass, $dbname) {
        $connectionInfo = array(
            "UID" => $dbuser,
            "PWD" => $dbpass,
            "Database" => $dbname
        );
        $this->con = sqlsrv_connect($dbhost, $connectionInfo);
    }

    function query($sql) {
        return sqlsrv_query($this->con, $sql);
    }

    function getRow($sql) {
        $result = $this->query($sql);
        $row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC);
        return $row;
    }

    function getAll($sql) {
        $result = $this->query($sql);
        $arr = array();
        while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
            $arr[] = $row;
        }
        return $arr;
    }

    function __destruct() {
        if ($this->con) {
            sqlsrv_close($this->con);
        }
    }
}

使用该类的调用方式如下:

// 初始化连接
$db = new DB("ServerName\\Instance", "sa", "password", "DatabaseName");

// 获取多条数据
$sql = "SELECT * FROM crm_order_batch WHERE status != 'closed'";
$orders = $db->getAll($sql);

// 遍历输出...
foreach ($orders as $order) {
    echo $order['id'];
}

完成判断

当上述代码运行不报错,且能正确打印出数据库中的记录时,即表明配置成功。如果在执行过程中遇到错误,请检查:
1. PHP 版本号与 .dll 是否匹配。
2. php.ini 中配置的 .dll 文件名是否存在拼写错误。
3. 数据库中是否有该用户权限,且 SQL Server 实例名称是否正确。

简要总结

通过安装 SQLSRV 驱动库并在 php.ini 中进行配置,我们实现了 PHP 对 SQL Server 2008/2005 的支持。这不仅解决了旧版驱动的兼容性问题,也为利用 PDO 或原生驱动操作企业级关系型数据库提供了基础。以上就是 PHP 连接 MSSQL 2008/2005 数据库的详细配置与使用教程,更多关于 PHP 数据库开发的资料请关注本站其它相关文章!

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表