必须根据phpinfo()显示的php版本、architecture(x86/x64)、thread safety(ts/nts)及compiler(vc11/vc14/vc15)四者严格匹配下载对应php_pdo_sqlsrv_.dll文件,缺一不可;同时需确保php.ini中按顺序启用extension=pdo、extension=php_pdo_sqlsrv_.dll、extension=php_sqlsrv_*.dll,并安装匹配的microsoft odbc driver。

怎么确认该装哪个 php_pdo_sqlsrv_*.dll 文件
不是随便选一个就能用,错一个就报 Call to undefined function sqlsrv_connect() 或 Apache 启动失败。关键看三件事:
-
phpinfo()页面里 PHP Version(比如 7.4.33)、Architecture(x86 还是 x64)、Thread Safety(enabled = ts,disabled = nts) - 你的 PHP 是用哪个编译器版本打的:VC15(PHP 7.3+)、VC14(PHP 7.0–7.2)、VC11(PHP 5.5–5.6)——
phpinfo()的 “Compiler” 行会写明 - 下载微软官方驱动时,必须匹配这三项。例如 PHP 7.4 x64 ts VC15 → 要
php_pdo_sqlsrv_74_ts_x64.dll和php_sqlsrv_74_ts_x64.dll
常见坑:_ts 和 _nts 混用、x86 DLL 放进 x64 PHP、VC 版本不匹配导致 Apache 直接无法启动(错误日志里出现 “The specified module could not be found”)。
php.ini 里只加两行 extension 就够了吗
不够。漏掉依赖项,PDO 层根本不会识别 sqlsrv: DSN。必须确保以下三行都存在、且顺序正确(pdo 必须在最前):
extension=pdoextension=php_pdo_sqlsrv_74_ts_x64.dllextension=php_sqlsrv_74_ts_x64.dll
注意:pdo 是核心扩展,不是 php_pdo.dll(这个文件早已废弃);php_sqlsrv_*.dll 是非 PDO 接口(如 sqlsrv_connect()),但 pdo_sqlsrv 依赖它运行,两者缺一不可。
为什么 phpinfo() 显示 pdo_sqlsrv,但 new PDO("sqlsrv:...") 还是报 “could not find driver”
大概率是 ODBC 驱动没装,不是 PHP 扩展的问题。pdo_sqlsrv 本身不带底层通信能力,它靠 Windows 上的 Microsoft ODBC Driver for SQL Server 转发请求。
- 必须安装对应版本的 ODBC 驱动:PHP 7.2+ 推荐用 ODBC Driver 17 或更新版(微软官网搜 “Microsoft ODBC Driver for SQL Server”)
- 旧版(如 ODBC Driver 11)只支持到 PHP 7.0,装了也白搭
- 安装后无需配置,但必须重启 Apache —— 不是刷新页面,是彻底 stop → start
验证方式:命令行运行 odbcad32.exe(Windows 自带),看“系统 DSN”里有没有 “ODBC Driver 17 for SQL Server”。
ThinkPHP / Yii / CodeIgniter 连接失败,是不是框架配置问题
多数情况不是。框架报 sqlsrv_connect() is not defined 或 Driver not found,90% 是上面三步没走全。但要注意两个细节:
- CodeIgniter 3.x 默认用
sqlsrv驱动(非 PDO),所以要确保php_sqlsrv_*.dll加载成功,且dbdriver = 'sqlsrv';如果想用 PDO,得手动切到pdo驱动并设dbprefix = 'sqlsrv:' - Yii2 中
dsn必须写成sqlsrv:Server=localhost;Database=test,不能写成mysql:那种格式;charset参数无效,SQL Server 字符集由数据库和连接选项控制
最容易被忽略的是:XAMPP 控制面板改的 php.ini 是 Apache 用的,但命令行 php -m 看的是 CLI 用的 php.ini —— 两个文件可能不同,务必确认你改的是 xampp\php\php.ini(不是 php.ini-development 或 php.ini-production)。











