MacOS下XAMPP环境CodeIgniter调用odbc_connect报错求助
问题背景
此问题曾被标记为已解决,但现有答案多针对Windows环境提供.dll文件下载方案,不适用于macOS用户,且未明确说明如何为XAMPP安装的PHP配置pdo_sqlsrv、sqlsrv及ODBC扩展。
本人在CodeIgniter 3.1.9中尝试通过ODBC连接MS SQL数据库,配置如下:
$db['default'] = array( 'dsn' => '', 'hostname' => 'x.x.x.x', 'username' => 'sa', 'password' => 'xxx', 'database' => 'xxx', 'dbdriver' => 'odbc' );
执行后出现报错:
An uncaught Exception was encountered Type: Error Message: Call to undefined function odbc_connect() Filename: /Applications/XAMPP/xamppfiles/htdocs/gpweb/system/database/drivers/odbc/odbc_driver.php Line Number: 141
查看XAMPP的php.ini文件,发现以下行因开头分号被禁用:
;extension=php_pdo_odbc.dll
已知.dll是Windows文件,不适用于macOS,但尝试启用后出现更多错误:
A PHP Error was encountered Severity: Core Warning Message: PHP Startup: Unable to load dynamic library '/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20160303/php_pdo_odbc.dll' - dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20160303/php_pdo_odbc.dll, 0x0009): tried: '/Applications/XAMPP/xamppfiles/lib/php_pdo_odbc.dll' (no such file), '/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20160303/php_pdo_odbc.dll' (no such file) Filename: Unknown Line Number: 0
解决方案
步骤1:安装微软ODBC Driver for SQL Server(macOS版)
macOS需要先安装官方ODBC驱动,才能让PHP的ODBC扩展正常工作:
- 打开终端,通过Homebrew安装(未安装Homebrew需先完成安装):
该命令会安装ODBC驱动17版本及配套SQL Server工具,满足连接MS SQL的基础依赖。brew install msodbcsql17 mssql-tools
步骤2:为XAMPP的PHP启用/安装ODBC扩展
XAMPP自带的PHP默认未编译ODBC扩展,需手动处理:
确认XAMPP PHP版本与配置路径
终端执行以下命令查看PHP版本:/Applications/XAMPP/xamppfiles/bin/php -v记录版本号(例如PHP 7.1.x,对应扩展目录
no-debug-non-zts-20160303)。通过pecl安装适配扩展
由于XAMPP的PHP独立于系统PHP,需用XAMPP自带的pecl工具安装:- 切换到XAMPP的PHP bin目录:
cd /Applications/XAMPP/xamppfiles/bin - 安装
pdo_odbc和odbc扩展:
安装过程中提示ODBC配置路径时,直接按回车使用默认即可(Homebrew安装的驱动已配置好环境)。./pecl install pdo_odbc ./pecl install odbc
- 切换到XAMPP的PHP bin目录:
修改php.ini启用扩展
打开XAMPP的php.ini(路径一般为/Applications/XAMPP/xamppfiles/etc/php.ini),将原Windows格式的扩展行替换为macOS适配格式:extension=pdo_odbc.so extension=odbc.so若pecl安装后已自动添加这些行,只需确保行首无分号注释即可。
重启XAMPP Apache服务
打开XAMPP控制面板,停止并重新启动Apache,使扩展生效。
步骤3:验证ODBC扩展是否生效
在XAMPP的htdocs目录下新建phpinfo.php文件,内容如下:
<?php phpinfo(); ?>
访问http://localhost/phpinfo.php,搜索odbc和pdo_odbc,若能找到对应模块信息,说明扩展已成功启用。
步骤4:调整CodeIgniter数据库配置
推荐使用DSN方式配置,稳定性更高:
$db['default'] = array( 'dsn' => 'Driver={ODBC Driver 17 for SQL Server};Server=x.x.x.x;Database=xxx;', 'username' => 'sa', 'password' => 'xxx', 'dbdriver' => 'odbc' );
注意Driver={ODBC Driver 17 for SQL Server}需与之前安装的驱动版本名称一致。
替代方案:使用sqlsrv扩展(推荐)
若无需ODBC,可直接安装微软官方的sqlsrv和pdo_sqlsrv扩展,更适配MS SQL:
- 通过pecl为XAMPP的PHP安装:
cd /Applications/XAMPP/xamppfiles/bin ./pecl install sqlsrv pdo_sqlsrv - 修改
php.ini添加:extension=sqlsrv.so extension=pdo_sqlsrv.so - 重启Apache后,将CodeIgniter数据库配置的
dbdriver改为sqlsrv(CI3.1.9原生支持该驱动)。
内容的提问来源于stack exchange,提问作者Grand Marshal Braev

