CodeIgniter 3.1.9:在 MacOS 中调用未定义的函数 odbc_connect()

问题描述 投票:0回答:2

更新:此问题已被标记为已解决的问题。但检查后发现,之前的那些“类似”问题要求用户下载相应的

.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?

php sql-server codeigniter xampp odbc
2个回答
0
投票

不幸的是,使用 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
扩展的方法,请随时在此处发布。


0
投票

尝试

sudo apt-get install php-odbc

然后重新启动 Apache。

© www.soinside.com 2019 - 2024. All rights reserved.