You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Server 2012 R2下PHP加载PDO SQLSRV驱动失败求助

排查Windows Server 2012 R2下PHP7.2加载PDO_SQLSRV失败的方法

我之前在Windows Server环境下折腾PDO_SQLSRV驱动的时候也踩过不少坑,结合你的环境信息(x64、非线程安全PHP7.2、ODBC17),给你梳理几个容易忽略的排查方向:

1. 严格核对驱动与环境的兼容性匹配

驱动对PHP版本、线程安全(TS/NTS)、架构的要求非常苛刻,差一点都不行:

  • 确认你下载的Microsoft Drivers 5.2 for PHP for SQL Server是对应x64 + 非线程安全(NTS) + PHP7.2的包,解压后PDO驱动的文件名应该是php_pdo_sqlsrv_72_nts_x64.dll(注意带版本和TS/NTS标识),不要只写php_pdo_sqlsrv.dll,很多版本的驱动文件名是带后缀的,写错了PHP根本找不到。
  • 检查ODBC Driver 17的架构:必须是x64版本,和你的PHP架构一致。可以通过控制面板 → 管理工具 → ODBC数据源(64位)查看是否有对应条目,确保不是装了32位的ODBC驱动。

2. 修正php.ini的配置细节

很多时候问题出在配置的小细节上:

  • 确认扩展路径正确:检查php.ini里的extension_dir是否是绝对路径,比如extension_dir = "C:\php\ext",并且驱动文件确实放在这个目录下。不要用相对路径,PHP可能解析不到。
  • 调整扩展配置行的位置:不要把extension=php_pdo_sqlsrv_72_nts_x64.dll放在[ExtensionList]段,直接移到[PHP]段末尾或者专门的扩展配置区域(比如文件最后)。有些PHP版本对[ExtensionList]的解析有兼容性问题,通用区域更稳妥。
  • 排查重复配置:用命令行执行findstr /i "pdo_sqlsrv" C:\php\php.ini(替换成你的php.ini路径),搜索所有相关配置行,确保只有一行是有效的(没有被注释,也没有重复配置)。

3. 系统层面的依赖与权限检查

  • 安装对应VC++运行库:PHP7.2需要Visual C++ Redistributable for Visual Studio 2017的x64版本,如果没装,驱动会因为缺少依赖无法加载。安装后记得重启服务器。
  • 检查文件权限:确保PHP运行的用户(比如IIS应用池的身份用户,或者命令行当前用户)对驱动所在的ext目录有读取权限。权限不足时PHP不会给出明确错误,但驱动就是加载不出来。
  • 查看PHP错误日志:打开php.ini的error_log配置,设置日志路径,比如error_log = "C:\php\php_errors.log",然后重启web服务器或者用命令行运行php -v,日志里会记录驱动加载失败的具体原因(比如找不到依赖、版本不兼容)。另外,命令行执行php -m可以直接看到加载的扩展列表,加载失败会直接在命令行输出错误提示,比phpinfo()更直观。

4. 验证web服务器的php.ini配置

有时候你修改的php.ini和web服务器实际使用的不是同一个:

  • 在phpinfo()页面查看Loaded Configuration File项的路径,确认你修改的是这个文件,避免白忙活。
  • 如果命令行php -m能看到pdo_sqlsrv,但phpinfo()里没有,说明是web服务器的配置问题(比如IIS没重启,或者应用池用了不同的PHP版本)。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:08:41