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

时间:2015-11-09 15:51:52

标签: codeigniter mysqli server

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

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时,一切都很好。

14 个答案:

答案 0 :(得分:18)

这不是你的应用程序中的错误,它只是一个缺少的驱动程序,所以,你有几个选项......

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

extension=php_mysqli.dll

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

尝试安装php5-mysqlnd

如果你不能通过托管限制来实现它,那么只需转移到mysql驱动程序(不需要在CodeIgniter中更改其他配置或查询或其他任何内容......)

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

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

答案 1 :(得分:12)

我刚刚使用ubuntu16.04安装了php7.1Codeigniter 3

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

sudo apt-get install php7.0-mysql

我意识到mysql*.ini目录中缺少etc/php/7.1/mods-available个文件。不确定它是怎么发生的,但这对我有用。

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

即可

答案 2 :(得分:4)

使用此:

sudo apt-get install php7.*-mysqli

sudo phpenmod mysqli
sudo service apache2 restart

答案 3 :(得分:3)

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

我已经在我的Linux服务器上安装了PHP5.6,并且很难按照使用ff命令的google搜索解决方案来安装PHP中缺少的mysqli_extension。

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

sudo apt-get install php5-mysqli

然而,我的php版本是5.6所以我试过

sudo apt-get install php5.6-mysqli

然后它有效。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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,如果不是配置扩展,请按此配置并记住重新启动您的Web服务器

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

答案 7 :(得分:0)

在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"

答案 8 :(得分:0)

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

extension=php_mysqli.dll

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

答案 9 :(得分:0)

在使用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

答案 10 :(得分:0)

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

sudo apt-get install php-mysql

答案 11 :(得分:0)

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

sudo yum install php-mysqli
sudo systemctl status httpd

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

答案 12 :(得分:-1)

如果您的网络服务器使用较低版本的MySQL运行,那么您将收到此错误,因为MySQL不支持MySQLi< 4.1.3

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

More info on php.net

答案 13 :(得分:-1)

我建议你做以下事情:

变化:

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

为:

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

database.php档案中。