php查找sqlserver数据

admin 104 0
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等集成环境)
  1. 下载对应版本的扩展文件

    • 访问微软官方GitHub仓库
    • 根据您的PHP版本选择合适的DLL文件(PHP 8.1应选择php_sqlsrv_ts_x64.dll
  2. 部署扩展文件

    • 将下载的DLL文件复制到PHP的扩展目录(如XAMPP/php/ext/
  3. 配置PHP环境

    • 编辑PHP配置文件php.ini,添加以下两行配置:
      extension=php_sqlsrv_ts_x64.dll
      extension=php_pdo_sqlsrv_ts_x64.dll  # 若使用PDO,需加载此扩展
  4. 验证安装

    • 重启Apache/Nginx服务
    • 通过phpinfo()函数查看"sqlsrv"相关模块是否成功加载
Linux环境(Ubuntu/CentOS)
  1. 安装必要的依赖包

    # 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
  2. 通过PECL安装扩展

    sudo pecl install sqlsrv
    sudo pecl install pdo_sqlsrv
  3. 配置PHP环境

    • 编辑PHP配置文件(如/etc/php.ini/etc/php/7.4/cli/php.ini),添加:
      extension=sqlsrv
      extension=pdo_sqlsrv
  4. 重启服务

    # 对于Apache
    sudo systemctl restart apache2
    # 对于Nginx+PHP-FPM
    sudo systemctl restart php7.4-fpm

配置SQL Server数据库

为确保PHP能够成功连接到SQL Server,需要进行以下配置:

  1. 启用SQL Server身份验证模式

    • 打开SQL Server Management Studio (SSMS)
    • 右键点击服务器 → "属性" → "安全性"
    • 勾选"SQL Server和Windows身份验证模式"
  2. 允许远程连接

    • 在"服务器属性"→ "连接"中,确保"允许远程连接到此服务器"已勾选
    • 对于云环境,还需在Azure门户或云服务商控制台配置防火墙规则
  3. 配置防火墙

    • 确保SQL Server默认端口1433已开放
    • 在Linux服务器上可通过以下命令检查端口监听状态:
      netstat -an | grep 1433
  4. 创建数据库用户

    • 为PHP应用创建专用数据库用户,并授予适当的权限
    • 建议使用最小权限原则,避免使用sa账户

连接SQL Server数据库:两种核心实现方式

PHP连接SQL Server主要有SQLSRV原生APIPDO(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:是否加密连接,生产环境应设为true
  • TrustServerCertificate:是否信任服务器证书,开发环境可设为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 #查询 #数据