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
相关产品推荐
相关产品推荐

