PHP可通过SQLSRV扩展或PDO_DBLIB连接SQL Server数据库,需在php.ini中启用对应扩展,使用sqlsrv_connect()或PDO构造函数建立连接,配置服务器名、用户名、密码及数据库名,编写SQL查询时建议用参数化查询防注入,通过sqlsrv_query()或PDO的query()执行,结果集用sqlsrv_fetch_array()或PDO::FETCH_ASSOC遍历,最后关闭连接释放资源,需处理连接失败和查询异常,确保数据安全与稳定。
PHP连接与查询SQL Server数据库实战指南
在Web开发领域,PHP与SQL Server数据库的交互是企业级应用中的常见场景,特别是在Windows服务器环境下的业务系统中,本文将系统性地介绍如何使用PHP连接SQL Server数据库,并实现高效的数据查询操作,内容涵盖环境配置、连接方式、查询执行、错误处理及进阶技巧,旨在帮助开发者快速掌握这一关键技术。
环境准备:搭建PHP与SQL Server的通信桥梁
在开始编码之前,必须确保PHP环境已具备与SQL Server数据库交互的能力,由于SQL Server是微软的专有数据库产品,PHP需要通过特定的扩展来实现与它的通信,目前主要有两种扩展方案:
- SQLSRV扩展:由微软官方提供,针对SQL Server进行了深度优化,性能表现优异,是生产环境的首选
- PDO_DBLIB扩展:通用型数据库抽象层扩展,支持多种数据库系统,适用于跨平台开发场景
本文将以SQLSRV扩展为主要讲解对象(推荐在生产环境中使用),同时也会简要介绍PDO的使用方法。
安装SQLSRV扩展
SQLSRV扩展的安装必须与PHP版本严格匹配,具体步骤如下:
Windows环境(XAMPP/WampServer等集成环境)
-
下载对应版本的扩展文件:
- 访问微软官方GitHub仓库
- 根据您的PHP版本选择合适的DLL文件(PHP 8.1应选择
php_sqlsrv_ts_x64.dll)
-
部署扩展文件:
- 将下载的DLL文件复制到PHP的扩展目录(如
XAMPP/php/ext/)
- 将下载的DLL文件复制到PHP的扩展目录(如
-
配置PHP环境:
- 编辑PHP配置文件
php.ini,添加以下两行配置:extension=php_sqlsrv_ts_x64.dll extension=php_pdo_sqlsrv_ts_x64.dll # 若使用PDO,需加载此扩展
- 编辑PHP配置文件
-
验证安装:
- 重启Apache/Nginx服务
- 通过
phpinfo()函数查看"sqlsrv"相关模块是否成功加载
Linux环境(Ubuntu/CentOS)
-
安装必要的依赖包:
# Ubuntu/Debian系统 sudo apt-get update sudo apt-get install php-dev php-pear unixodbc-dev gcc g++ make # CentOS/RHEL系统 sudo yum install php-devel php-pear unixODbc-devel gcc gcc-c++ make
-
通过PECL安装扩展:
sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv
-
配置PHP环境:
- 编辑PHP配置文件(如
/etc/php.ini或/etc/php/7.4/cli/php.ini),添加:extension=sqlsrv extension=pdo_sqlsrv
- 编辑PHP配置文件(如
-
重启服务:
# 对于Apache sudo systemctl restart apache2 # 对于Nginx+PHP-FPM sudo systemctl restart php7.4-fpm
配置SQL Server数据库
为确保PHP能够成功连接到SQL Server,需要进行以下配置:
-
启用SQL Server身份验证模式:
- 打开SQL Server Management Studio (SSMS)
- 右键点击服务器 → "属性" → "安全性"
- 勾选"SQL Server和Windows身份验证模式"
-
允许远程连接:
- 在"服务器属性"→ "连接"中,确保"允许远程连接到此服务器"已勾选
- 对于云环境,还需在Azure门户或云服务商控制台配置防火墙规则
-
配置防火墙:
- 确保SQL Server默认端口1433已开放
- 在Linux服务器上可通过以下命令检查端口监听状态:
netstat -an | grep 1433
-
创建数据库用户:
- 为PHP应用创建专用数据库用户,并授予适当的权限
- 建议使用最小权限原则,避免使用sa账户
连接SQL Server数据库:两种核心实现方式
PHP连接SQL Server主要有SQLSRV原生API和PDO(PHP Data Objects)两种方式,前者针对SQL Server进行了深度优化,性能更高;后者作为数据库抽象层,提供了更好的兼容性和预处理语句支持。
使用SQLSRV原生API连接
SQLSRV扩展提供了sqlsrv_connect()函数实现数据库连接,基本语法如下:
<?php
// 服务器配置
$serverName = "服务器地址,端口号"; // 如"localhost,1433"或"192.168.1.100,1433"
$connectionOptions = [
"Database" => "数据库名",
"UID" => "用户名", // SQL Server登录用户名
"PWD" => "密码", // SQL Server登录密码
"CharacterSet" => "UTF-8", // 确保支持中文
"Encrypt" => false, // 生产环境建议启用
"TrustServerCertificate" => true, // 开发环境可开启
"LoginTimeout" => 30, // 连接超时时间(秒)
"MultipleActiveResultSets" => true // 支持多个活动结果集
];
// 建立连接
$conn = sqlsrv_connect($serverName, $connectionOptions);
// 检查连接是否成功
if ($conn === false) {
die("连接失败:" . print_r(sqlsrv_errors(), true));
}
echo "连接成功!";
// 使用完毕后关闭连接
sqlsrv_close($conn);
?>
参数说明:
serverName:格式为"服务器IP,端口号",本地数据库可简写为"localhost"Database:要连接的数据库名称UID/PWD:SQL Server的认证凭据CharacterSet:字符集设置,建议使用"UTF-8"以支持多语言Encrypt:是否加密连接,生产环境应设为trueTrustServerCertificate:是否信任服务器证书,开发环境可设为true
Windows身份验证(推荐企业内网环境)
若SQL Server配置为Windows身份验证,连接选项应相应调整:
$connectionOptions = [
"Database" => "数据库名",
"TrustServerCertificate" => true,
"Authentication" => "ActiveDirectoryIntegrated", // 使用当前Windows账户认证
"LoginTimeout" => 30
];
$conn = sqlsrv_connect($serverName, $connectionOptions);
注意事项:
- Windows身份验证仅适用于Windows服务器环境
- 确保运行PHP的账户具有访问SQL Server的权限
- 对于IIS环境,可能需要配置应用程序池标识
使用PDO连接SQL Server
PDO是PHP的数据库抽象层,支持多种数据库系统,通过PDO::__construct()实现连接:
<?php
// DSN(Data Source Name)配置
$dsn = "sqlsrv:Server=服务器地址,端口号;Database=数据库名;charset=UTF-8";
$username = "用户名";
$password = "密码";
// PDO选项配置
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 开启异常模式
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认关联数组获取结果
PDO::ATTR_EMULATE_PREPARES => false, // 使用原生预处理语句
PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8 // 确保UTF-8编码
];
try {
// 创建PDO 标签: #php sqlserver #查询 #数据