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.04
、php7.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()