PHP连接SQL Server遇PDO异常:找不到驱动问题求助
首先,你同时加载了线程安全(TS)和非线程安全(NTS)版本的驱动DLL,这是最可能的核心问题——PHP只能适配其中一种架构的扩展,混装必然会导致加载失败。咱们一步步拆解排查:
第一步:确认你的PHP是TS还是NTS架构
打开命令行运行php -v,看输出里的Thread Safety字段:- 显示
Thread Safety => enabled,说明是TS版本; - 显示
Thread Safety => disabled,则是NTS版本。
也可以创建一个phpinfo.php文件(内容为<?php phpinfo(); ?>),访问后找到Thread Safety项确认。
- 显示
第二步:清理php.ini的扩展加载配置
根据第一步确认的架构,只保留对应版本的驱动加载语句,删掉或注释掉另一种架构的配置。比如如果是TS版本,php.ini里应该只留:extension=php_sqlsrv_72_ts.dll extension=php_pdo_sqlsrv_72_ts.dll绝对不能同时加载TS和NTS的DLL,这会直接引发扩展加载冲突。
第三步:确认扩展路径配置正确
检查php.ini里的extension_dir配置,确保它指向你的php/ext目录。Windows系统建议用绝对路径,比如:extension_dir = "C:/php/ext"也可以通过phpinfo()里的
Extension Directory项,验证路径是否正确匹配。第四步:检查驱动与PHP的x86/x64架构匹配
查看phpinfo()里的Architecture项,确认你的PHP是32位还是64位,下载的SQLSRV驱动必须和这个架构完全一致。比如PHP是64位,就不能用32位的DLL,否则会直接加载失败。第五步:安装必要的系统依赖
SQLSRV驱动依赖Microsoft ODBC Driver for SQL Server,PHP 7.2至少需要ODBC 17版本(建议安装最新兼容的稳定版)。如果没装这个ODBC驱动,即使DLL路径正确,也会提示找不到驱动。第六步:重启服务并验证加载状态
修改php.ini后,必须重启你的Web服务器(Apache/Nginx/IIS),命令行环境也要重新打开终端。之后运行php -m,查看输出里是否有sqlsrv和pdo_sqlsrv模块;或者访问phpinfo.php,查找这两个模块的信息,确认是否加载成功。
如果以上步骤都排查后仍有问题,可以把php -v的完整输出、phpinfo里的Thread Safety和Architecture信息贴出来,方便进一步定位问题。
内容的提问来源于stack exchange,提问作者lucas rs

