codeigniter 4 报 sqlsrvdrv 未找到,本质是 php 环境缺失组件:需确保 odbc 驱动安装正确、sqlsrv/pdo_sqlsrv 扩展成功加载且顺序合规(pdo.so 在前)、ci4 数据库配置中 dsn 显式指定 driver={odbc driver 17 for sql server} 并与系统驱动名称完全一致。

CodeIgniter 4 报 SQLSRVDRV 未找到,本质不是 CI 框架的问题,而是底层 PHP 环境缺失关键组件——它提示 PDO 或 sqlsrv 驱动注册失败,常见于 Windows 或 Linux 下 SQL Server 连接链断裂。核心要解决三件事:ODBC 驱动到位、PHP 扩展加载成功、CI4 数据库配置精准匹配。
确认并安装微软官方 ODBC 驱动
这是最容易被跳过的一步,但却是 90% “驱动未找到” 的根源。
- Windows:必须安装 ODBC Driver 17 for SQL Server(非已弃用的 SQL Server Native Client)。从微软官网下载安装后,检查系统环境变量 PATH 是否包含
C:Program FilesMicrosoft SQL ServerClient SDKODBCxToolsBinn;再运行odbcad32.exe,在“驱动程序”页签中确认存在 ODBC Driver 17 for SQL Server(名称含空格和大小写) - Linux(Ubuntu/Debian):
sudo apt-get install unixodbc-dev+curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -+ 添加源后安装msodbcsql17 - Linux(CentOS/RHEL):
sudo yum install unixODBC-devel+sudo ACCEPT_EULA=Y yum install msodbcsql17;装完执行odbcinst -j确认Driver路径下有libmsodbcsql-17.so
验证 PHP 扩展是否真正生效
光在 php.ini 写 extension=sqlsrv 和 extension=pdo_sqlsrv 不够,需确认它们被 PHP 实际加载且顺序正确。
- CLI 下运行
php -m | grep -i sqlsrv,应同时看到sqlsrv和pdo_sqlsrv - Web 环境中新建
info.php输出phpinfo(),搜索 “sqlsrv”,确认扩展启用且版本与 PHP 版本兼容(如 PHP 8.1 推荐 sqlsrv 5.11.x) - 扩展加载顺序很重要:
pdo.so必须在pdo_sqlsrv.so之前;建议单独建20-sqlsrv.ini放入 PHP 的conf.d目录,内容为:extension=pdo.so<br>extension=sqlsrv.so<br>extension=pdo_sqlsrv.so
CI4 数据库配置必须显式声明 driver 名称
CodeIgniter 4 的 SQLSRV 驱动不自动推断 ODBC 驱动名,DSN 中缺 driver= 参数就会报 SQLSRVDRV 未找到。
- 修改
app/Config/Database.php中的 SQL Server 配置,关键字段如下:
$db['default'] = [
'DSN' => 'sqlsrv:server=localhost;Database=mydb;driver={ODBC Driver 17 for SQL Server};',
'hostname' => '', // DSN 已覆盖,此项可留空
'username' => 'sa',
'password' => 'yourpass',
'DBDriver' => 'sqlsrv',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'SQL_Latin1_General_CP1_CI_AS',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 1433,
];
```
- 注意:
driver={ODBC Driver 17 for SQL Server}必须与odbcad32或odbcinst -j显示的驱动名称完全一致(包括空格、括号、大小写) - 若用命名实例(如
SQLEXPRESS),server 应写成localhost\SQLEXPRESS,并确保 SQL Server Browser 服务已启动
排查 SQL Server 服务与网络连通性
即使 PHP 层都对了,SQL Server 自身不可达也会让驱动初始化失败,表现为连接时抛出 SQLSRVDRV 错误或空连接 ID。
- Windows 下打开
services.msc,确认SQL Server (MSSQLSERVER)或对应实例服务状态为“正在运行” - 用
telnet 127.0.0.1 1433测试端口是否开放(若失败,需在 SQL Server 配置管理器中启用 TCP/IP 协议,并重启服务) - SQL Server Management Studio 中测试相同账号密码能否登录;若提示“用户登录失败”,检查 SQL Server 是否启用混合模式认证,且账号已授予数据库访问权限











