Codeigniter:对未定义函数 mysqli_init() 的致命错误调用

Posted

技术标签:

【中文标题】Codeigniter:对未定义函数 mysqli_init() 的致命错误调用【英文标题】:Codeigniter: fatal error call to undefined function mysqli_init() 【发布时间】:2016-02-10 07:48:03 【问题描述】:

我刚刚更改了我的服务器并遇到以下错误:

Fatal error: Call to undefined function mysqli_init() in /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php on line 126
A PHP Error was encountered

Severity: Warning

Message: Cannot modify header information - headers already sent by (output started at /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php:126)

Filename: core/Common.php

Line Number: 564

Backtrace:

A PHP Error was encountered

Severity: Error

Message: Call to undefined function mysqli_init()

Filename: mysqli/mysqli_driver.php

Line Number: 126

Backtrace:

网站在 Codeigniter 中。它可以在一台服务器上很好地工作,也可以在本地机器上工作。但是当我在新服务器上上传该网站时,我遇到了错误。当然,我更改了重要的参数,如数据库连接、base_url() 等。

我对数据库持怀疑态度,但我创建了一个新的数据库和用户等并更改了连接信息。

为什么会这样?了解它是服务器上的错误还是网站上的错误将很有帮助。此外,当我使用一些测试代码创建一些 index.html 时,一切都很好。

【问题讨论】:

检查新服务器的 phpinfo() 并确保已安装 mysqli。 你解决了吗? @hybrid 我不知道你为什么为此开放赏金。这是用户错误的cz。同样,如果有错误我们无法检查。 Cz这里没有代码 我建议您重新安装 mysql 并在 php.ini 中添加所需的更改因为可能某些文件丢失/未正确添加到已安装的 mysql 应用程序中。 【参考方案1】:

这不是您的应用程序中的错误,它只是缺少驱动程序,因此,您有几个选择...

转到您的 php init 并取消注释以下内容:

extension=php_mysqli.dll

如果没有,请尝试将其安装在您的服务器上,具体取决于您的发行版。

尝试安装php5-mysqlnd

如果您无法通过托管限制来做到这一点,那么只需移动到 mysql 驱动程序(不需要更改 CodeIgniter 中的其他配置或查询或其他任何东西......)

像这样(在你的配置文件中)

$db['default']['dbdriver'] = 'mysql'; (you might have mysqli now)

【讨论】:

使用 php 5.4 或更高版本 mysqlnd 似乎是默认选项? mysqlndphp-mysqlnd 很好,这就是我的解决方案。就我而言,我正在运行 centos 7,我必须重新启动 httpd 服务才能使其正常工作。 "sudo yum systemctl 重启 httpd"【参考方案2】:

我刚刚在使用Codeigniter 3 安装ubuntu16.04php7.1 时遇到了这个问题。

解决方案很简单(如果很难找到!)

sudo apt-get install php7.0-mysql

我意识到mysql*.ini 文件在etc/php/7.1/mods-available 目录中丢失。不知道它是怎么发生的,但这对我有用。

如果您使用 7.2,只需输入 sudo apt-get install php7.2-mysql

【讨论】:

mmm... 这个问题是在 2015 年 11 月 9 日提出的,PHP 7 was released on december 17, 2015. 我确定此时还有另一种解决方案。 我觉得不重要,一直在找这个解决方案,版本明显不时更新。【参考方案3】:

使用这个:

sudo apt-get install php7.*-mysqli

sudo phpenmod mysqli
sudo service apache2 restart

【讨论】:

【参考方案4】:

这其实不是 CodeIgniter 问题,而是 PHP 安装问题。

我已经在我的 Linux 服务器中安装了 PHP5.6,并且很难遵循使用 ff 命令在 PHP 中安装缺少的 mysqli_extension 的谷歌解决方案。

我尝试的是但返回警告消息:无法找到包 php5-mysqli

sudo apt-get install php5-mysqli

但是,我的php版本是5.6所以我尝试了

sudo apt-get install php5.6-mysqli

然后就可以了。

【讨论】:

【参考方案5】:

打开你安装PHP的文件夹,编辑php.ini文件取消注释这一行: extension=php_mysqli.dll

【讨论】:

【参考方案6】:

问题是php的mysql扩展可能没有安装,如果您使用的是php 7,只需发出以下命令并安装扩展,

sudo apt-get install php-mysql

【讨论】:

【参考方案7】:

对我来说,这是 php.ini 中缺少的一行解决了这个问题,因为我将另一个 php.ini 文件复制到了我的 XAMPP安装。 值得检查以下行:“extension=php_mysqli.dll”是否存在(如果运行 Windows,但这不适用于 OP,因为它是 Linux 系统),或者“extension_dir”是否存在且正确。

【讨论】:

我正在使用 Web 服务器 (cPanel) 并安装了 mysqli。我尝试删除它并添加它。问题依然存在。【参考方案8】:

1、apt-get install (yum, compile install 不管什么) php5-mysqlnd 扩展。

2、如果不行,请确保加载了mysqli

    root@x19-ws07-1:/etc/php5/apache2# cat /proc/31682/maps | grep mysql

如果加载了,可以看到:

    7f2cd3266000-7f2cd3285000 r-xp 00000000 fd:00 864561                     /usr/lib/php5/20131226/mysqli.so
    7f2cd69ef000-7f2cd6a2e000 r-xp 00000000 fd:00 864559                     /usr/lib/php5/20131226/mysqlnd.so

3、如果没有加载使用 php --ini 查找配置文件

    xxxx@xxxx:~$ php --ini
    Configuration File (php.ini) Path: /etc/php5/apache2
    Loaded Configuration File:         /etc/php5/apache2/php.ini
    Scan for additional .ini files in: /etc/php5/apache2/conf.d
    Additional .ini files parsed:      /etc/php5/apache2/conf.d/05-opcache.ini,
    /etc/php5/apache2/conf.d/20-mysqli.ini

4、如果没有配置扩展,像这样配置并记得重启你的网络服务器

    xxxx@xxxxx:~$ cat /etc/php5/apache2/conf.d/20-mysqli.ini
    ; configuration for php MySQL module
    ; priority=20
    extension=mysqli.so

【讨论】:

【参考方案9】:

在 Linux 中,您可以安装 MySQL 驱动程序扩展。

sudo apt-get install php-mysql

在带有 XAMPP 的 Windows 中,驱动已经保存在 ext 目录中,但您需要在 php.ini 中启用它。您需要取消注释此行:

extension=php_mysqli.dll

您还需要检查 php.ini 中的扩展目录位置。我使用绝对路径(不是相对路径)声明来使其工作。

extension_dir="your\absolute\path\to\xampp\php\ext"

例如,

extension_dir="C:\xampp\php\ext"

【讨论】:

【参考方案10】:

我试过了,在/etc/php/cli/php.ini文件下面的行注释掉。

extension=php_mysqli.dll

我在 AWS-EC2 实例和 PHP 7.0 上使用 Ubuntu 16.04。这解决了我的问题。

【讨论】:

【参考方案11】:

在我使用 Windows 的情况下,我没有注释所有必要的扩展,但它没有加载它们。然后,我检查了 php.ini 中的扩展目录变量,它是"ext",但后来我记得我以前遇到过类似的问题。所以我所做的基本上是把显式目录。像这样的:

extension_dir = "C:\php\ext"

当然具体的 ext 目录完全取决于你自己的设置和位置。

更新 php.ini 文件后,您只需重新启动 Apache 即可应用更改。

如果您手动安装 Apache(不使用 XAMPP 或 WAMPP 等预打包解决方案),您只需在命令提示符或具有管理员权限的 Powershell 中使用这些命令。

net stop Apache2.4

net start Apache2.4

【讨论】:

【参考方案12】:

我知道差别不大,但对于运行 CentOS 的人来说:

sudo yum install php-mysqli
sudo systemctl status httpd

我们正在使用yum 安装mysqli 扩展,然后重新启动我们的httpd 服务器以使更改生效,如果您不使用httpd,只需将httpd 替换为您的名称服务。

【讨论】:

【参考方案13】:

如果您的网络服务器运行的是较低版本的 MySQL,那么您将收到此错误,因为 MySQL

强烈建议使用 MySQLi 而不是返回 MySQL 扩展。

More info on php.net

【讨论】:

我查了版本,是最新的【参考方案14】:

我建议您执行以下操作:

改变:

'dbdriver' => 'mysqli',
'dbprefix' => '',

到:

'dbdriver' => 'mysql',
'dbprefix' => '',

database.php 文件中。

【讨论】:

以上是关于Codeigniter:对未定义函数 mysqli_init() 的致命错误调用的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 4 项目中未定义的常量“CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT”

在 CodeIgniter 中调用未定义的方法 CI_DB_mysqli_result::where()

在CodeIgniter中调用未定义的方法CI_DB_mysqli_result :: where()

Codeigniter 3 MySQLi 安全数据库连接

尝试使用 mysqli 连接到数据库时出现 Codeigniter 错误

对未定义函数 curl_init() 的卷曲调用