PHP连接MSSQL:三种驱动方案与实战要点

2026-11-03 0 10

先确认环境与驱动

PHP本身没有内置MSSQL驱动。连接SQL Server需要额外扩展,常见三类:微软官方sqlsrv(过程式接口)、PDOSQLSRV(PDO接口)和FreeTDS体系下的PDODBLIB。新版PHP建议优先使用微软驱动,它对SQL Server 2012及以上版本支持更完整,也支持Windows身份验证。

三种方案对比

sqlsrv扩展

函数风格,类似mysqli,适合偏好过程式代码的项目。连接写法:

$conn = sqlsrv_connect(‘127.0.0.1’, [

‘Database’ => ‘demo’,

‘UID’ => ‘sa’,

‘PWD’ => ‘secret’,

‘CharacterSet’ => ‘UTF-8’,

]);

if ($conn === false) {

die(printr(sqlsrverrors(), true));

}

PDO_SQLSRV

推荐新项目使用。统一PDO接口,支持预处理与异常模式:

$pdo = new PDO(

‘sqlsrv:Server=127.0.0.1;Database=demo’,

‘sa’, ‘secret’,

[PDO::ATTRERRMODE => PDO::ERRMODEEXCEPTION]

);

PDO_DBLIB

Linux下通过FreeTDS连接,无需微软驱动,但字符集和日期类型处理需额外留意,适合无法安装微软扩展的老环境。

安装与配置要点

Windows下将对应PHP版本的phpsqlsrv与phppdosqlsrv DLL放入ext目录,并在php.ini中启用;同时安装ODBC Driver for SQL Server。Linux下用pecl安装sqlsrv与pdosqlsrv,先装msodbcsql与unixODBC开发包。启用后可用php -m确认扩展已加载。

字符集与错误处理

连接字符串中显式指定CharacterSet=UTF-8,避免中文乱码。开启PDO异常模式后,用try/catch捕获PDOException,比静默返回false更易排查。注意SQL Server的datetime精度与PHP DateTime的转换差异。

参数化查询示例

$stmt = $pdo->prepare(‘SELECT id, name FROM users WHERE dept = ? AND age > ?’);

$stmt->execute([‘技术部’, 25]);

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

常见坑

一是PHP大版本与驱动版本不匹配,导致扩展加载失败;二是Linux下未装ODBC驱动,仅装pecl扩展仍无法连接;三是连接超时,需在连接串中设置LoginTimeout。逐一排查扩展、驱动、网络三层,多数连接问题可定位。

看过这篇文章的人,推荐看以下内容

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

版权声明:所有的源码、软件和资料,不得使用于非法商业用途,不得违反国家法律,一切关于该资源商业行为与本站无关。

免费cms模板 建站百科 PHP连接MSSQL:三种驱动方案与实战要点 https://www.mianfeicms.com/12325.html

我是签名

相关文章

猜你喜欢
发表评论
暂无评论