PHP 连接 MSSQL 2008/2005:SQLSRV 驱动配置与使用指南
本文将详细介绍如何在 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 数据库开发的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













