PHP PDO连接MSSQL提示‘could not find driver’故障求助
解决PHP PDO连接MSSQL报"could not find driver"的问题
我之前踩过一模一样的坑,给你梳理几个关键的排查和解决步骤,应该能搞定:
1. 确保驱动和PHP环境完全匹配
这是最容易出错的点!你下载的SQLSRV驱动必须和你的PHP版本、线程安全(TS/NTS)、系统位数(32/64位)完全对应:
- 比如你用的是PHP 8.0 64位线程安全版,就得下载对应版本的
php_sqlsrv_80_ts_x64.dll和php_pdo_sqlsrv_80_ts_x64.dll - 别乱下版本,比如SQLSRV 5.x支持PHP7.2-8.0,SQLSRV 6.x支持PHP8.0-8.2,一定要精准对应
2. 安装基础ODBC驱动
PHP的SQLSRV驱动依赖Microsoft ODBC Driver for SQL Server,光装PHP驱动没用!得先安装对应系统的ODBC驱动(比如ODBC 17或18版本),这是底层依赖,必须先搞定。
3. 正确配置php.ini并重启服务
- 把下载的
php_sqlsrv.dll和php_pdo_sqlsrv.dll放到PHP的ext目录下 - 打开php.ini,添加或取消注释这两行(如果驱动不在默认ext目录,要写绝对路径):
extension=php_sqlsrv.dll extension=php_pdo_sqlsrv.dll - 重点:一定要重启你的Web服务器(Apache/Nginx)或者PHP-FPM,CLI模式的话要重启命令行窗口,不然配置根本不会生效!
4. 验证驱动是否成功加载
写一个简单的测试脚本phpinfo.php:
<?php phpinfo(); ?>
访问后搜索pdo_sqlsrv和sqlsrv,如果能找到对应的模块信息,说明驱动加载成功;如果没有,回到前面步骤排查版本匹配、php.ini配置和服务器重启的问题。
或者用CLI命令快速验证:
php -m
看输出里有没有pdo_sqlsrv和sqlsrv这两个模块。
5. ODBC方式的正确姿势
如果你尝试ODBC连接,要先配置ODBC数据源:
- Windows下打开ODBC数据源管理器(注意32位和64位的区别:64位是
odbcad32.exe,32位是C:\Windows\SysWOW64\odbcad32.exe) - 创建系统DSN,选择SQL Server驱动,填写服务器地址、数据库名,测试连接确保能通
- 然后PDO连接字符串要写成:
try { $conn = new PDO("odbc:DSN=你的DSN名称", "用户名", "密码"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); }
6. 检查SQLSRV直接连接的字符串格式
用SQLSRV原生驱动连接的话,正确的PDO连接字符串格式是:
try { $conn = new PDO("sqlsrv:Server=你的服务器地址;Database=你的数据库名", "用户名", "密码"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "连接成功!"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); }
如果是本地SQL Server Express版本,服务器地址可以写成.\SQLEXPRESS。
按照这些步骤一步步排查,应该能解决找不到驱动的问题。
内容的提问来源于stack exchange,提问作者user8792746
相关产品推荐
相关产品推荐

