更新:此问题已被标记为已解决的问题。但检查后发现,之前的那些“类似”问题要求用户下载相应的
.dll
文件,该文件不适用于 macOS 用户,并且其他答案没有明确详细说明如何安装所需的扩展,例如 pdo_sqlsrv、sqlsrv 和 XAMPP 的 ODBC -安装了 PHP。
我正在尝试通过 ODBC 使用 CodeIgniter 3.1.9 连接到 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
PHP 通过 XAMPP 安装。我检查了
php.ini
文件以获取有关 ODBC 的信息,并且由于开头有分号,所以下面的行被禁用:
;extension=php_pdo_odbc.dll
我知道这是无关紧要的,因为我在 MacOS 上运行,而
.dll
文件适用于 Windows(但我仍然尝试启用它并出现更多错误):
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
以前有人遇到过这个问题吗?你是如何解决的?如何在使用 XAMPP 安装 PHP 的 MacOS 中启用 ODBC?
不幸的是,使用 XAMPP 安装 PHP 的 macOS 用户无法安装
sqlsrv
、pdo_sqlsrv
和 ODBC
等扩展,这与 Windows 不同,他们可以下载必要的 .dll
文件并在php.ini
。
我多年来一直使用 CodeIgniter 3.x.x 来创建 Web 应用程序并使用 MySQL 作为数据库。我想在需要 MSSQL 作为数据库的其他项目中使用上述 PHP 库,因为 CI 可以这样做,前提是您已经安装了必要的扩展。
我查遍了互联网,确实没有明确的解决方案可以在运行 macOS 的 XAMPP 安装的 PHP 中安装扩展。
我放弃并使用自制程序安装 PHP。在您的终端中,输入:
$ brew install php
然后安装
sqlsrv
扩展(适用于M1 ARM64用户)
sudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" LDFLAGS="-L/opt/homebrew/lib/" pecl install sqlsrv
sudo CXXFLAGS="-I/opt/homebrew/opt/unixodbc/include/" LDFLAGS="-L/opt/homebrew/lib/" pecl install pdo_sqlsrv
然后
ODBC
扩展名:
HOMEBREW_NO_ENV_FILTERING=1 ACCEPT_EULA=Y
brew install msodbcsql17 mssql-tools
由于我无法使用 XAMPP 安装的 PHP,因此我必须使用 CodeIgniter 4 来使用本机安装的 PHP:
composer create-project codeigniter4/appstarter project-root
之后,在我的 CodeIgniter 4 项目的
/project/app/Config/Database.php
中,设置与数据库的连接:
public $default = [
'DSN' => '',
'hostname' => 'x.x.x.x', // IP ADDRESS OF THE SQL SERVER
'username' => 'xxx', // USERNAME
'password' => 'xxx', // PASSWORD
'database' => 'xxx', // NAME OF DATABASE
'DBDriver' => 'SQLSRV', // DATABASE DRIVER TO BE USED
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 1433, // DEFAULT PORT FOR SQL SERVER
];
这不是原始问题(XAMPP 安装的 PHP)的解决方案,而是使用 PHP 连接 MSSQL 数据库的替代解决方案。
参考:
但是,如果您找到了在运行 macOS 的 XAMPP 安装的 PHP 中安装
sqlsrv
和 ODBC
扩展的方法,请随时在此处发布。
尝试
sudo apt-get install php-odbc
然后重新启动 Apache。