如何解决“致命错误:找不到类'MySQLi'”?


92

我正在做一个教程,并收到此错误:

致命错误:在第8行上找不到类“ MySQLi”(LONG URL)

第8行的代码是:

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);

我在网上看到有人说要在我的phpinfo()中将其打开,但是“ mysqli”下没有列出任何内容。

另外,我正在运行PHP版本5.2.5


您可以使用手写的MYSQLi类,因此不需要安装mysqli。如果您不拥有服务器,则这是唯一的解决方案。

Answers:


83

听起来您只需要安装MySQLi即可

如果您认为自己已完成此操作,但仍然遇到问题,请发布您的操作系统以及可能有助于进一步诊断的其他任何信息。


20
在AWS上,您只需运行sudo yum install php-mysqli
bobobobo

对我来说,它已通过以下方式修复:apt-get install php7.0-mysql。我在Raspbian Stretch 9上运行
negrotico19 '18

在具有Amazon Linux的AWS上,将类似于sudo yum install php56-mysqlnd.x86_64(选择与您所安装的php版本匹配的一个)
auspicious99

46

您可以通过执行以下代码检查mysqli库是否存在:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}

6
我仍然收到“我们没有mysqli !!!” 即使在运行`sudo apt-get install php5-mysqlnd`之后?
Banned_User 2015年

我得到了“ Phew我们拥有它,但我不断收到与在任何想法中找不到Class'msqli'相同的错误?
PA-GW

36

如果您使用的是Ubuntu,请运行:

 sudo apt-get install php5-mysqlnd

5
并且不要忘记在此之后重新启动Apache!
fracz

@fracz重新启动Apache是​​我忘记的部分。我只重新启动了MySQL。谢谢。
詹姆斯

这还不够。我仍然缺少php5-mysql软件包。用于sudo apt-get -y install php5-mysql php5-mysqlnd两者兼得。@Hermann Ingjaldsson是您所缺少的吗?
Balmipour


21

如果从命名空间的类中调用“ new mysqli(..)”,则可能会看到类似的错误Fatal error: Class 'foo\bar\mysqli' not found in。解决此问题的方法是使用前面的反斜杠将其显式设置为根名称空间,如下所示:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);

1
这应该是第一件事。
詹姆斯·贝利

15

除了取消对php_mysqli.dll在扩展php.ini中,也取消注释的extension_dir指令在php.ini中,并注明您的位置:

extension_dir = "C:\software\php\dist\ext"

这使它对我有用。


它对我有用,./ext但这是相对路径。我不得不重新命名php.ini-development,以php.ini和在该文件中取消注释extension=php_mysqli.dll。哦,男孩,我没有错过您的PHP。
Overdrivr

对于我来说(在Windows上),这里的窍门是在“ extension_dir”中键入扩展名dir的绝对路径。
TechNyquist,


2

如何在php.ini中启用mysqli

  1. 通过删除php.ini中的以下配置来进行编辑/取消注释(冒号): 1st(取消注释并添加配置):include_path =“ C:\ php \ includes” 2nd(取消注释):extension_dir =“ ext” 3rd(取消注释)并编辑配置):extension = C:/PHP/ext/php_mysql.dll extension = C:/PHP/ext/php_mysqli.dll
  2. 重新启动IIS服务器
  3. 确保mysql在系统上运行。

如何加载php.ini文件

  1. 从C:\ PHP将文件php.ini-production / php.ini-development中的任何一个重命名为php.ini(注意,扩展名为ini,即“ php.ini”)。
  2. 重命名为php.ini文件后,重新启动服务器
  3. 查看http://localhost/phpinfo.php中的更改

2

如果您使用Docker ...

内部php容器RUN:

#docker-php-ext-install mysqli

#apachectl restart

1
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。- 评分
二万

@Erwan,它确实起作用了
您的常识


1

我以为我可以使用Namesco服务器帮助有相同问题的任何人。将数据库从家用PC上的本地服务器移至Namesco后,我一直试图解决此问题。他们不会帮助他们说这是一个编码问题。

  • 但是,从其CPANEl LINUX托管界面进行修复很简单。
  • 点击php。
  • 然后单击php模块,然后从其预装模块列表中单击mysqli框。
  • 然后点击保存。(如果它在另一台服务器上工作,则无需更改代码。)

不幸的是,他们的支持文章浪费时间。阅读此内容后,我以新的决心进入了管理界面。


0

一些发行版(例如Gentoo)支持PHP的多个安装,并且您必须确保使用的是已安装并启用mysqli的版本。

在Gentoo上,我安装了新的PHP(启用了mysqli USE标志),但是我需要激活新版本的PHP(因为旧版本必须缺少mysqli):

# eselect php list apache2
  [1]   php5.3 *
  [2]   php5.5
# eselect php set apache2 2
You have to run `/etc/init.d/apache2 restart' for the changes to take effect
# /etc/init.d/apache2 restart

0

我检查了所有以上内容,但对我却不起作用,

我发现了一些步骤。

我在Ubuntu 14.04上使用PHP版本5.5.9-1ubuntu4.17

首先检查文件夹

#ls /etc/php5/mods-available/
json.ini  mcrypt.ini  mysqli.ini  mysql.ini  mysqlnd.ini  opcache.ini  pdo.ini  pdo_mysql.ini  readline.ini  xcache.ini

如果它不包含mysqli.ini,请阅读其他答案以进行安装,

打开php.ini查找extension_dir

就我而言,我必须 extension_dir = /usr/lib/php5/20121212

并重新启动apache2: /ect/init.d/apache2 restart


0

PHP zip包含\ ext目录下的大多数常用扩展名(在Windows上的* .dll,例如php_mysqli.dll),但是默认情况下未启用它们。尝试使用MySQLi时,您可能会收到此致命错误:

( ! ) Fatal error: Uncaught Error: Class 'mysqli' not found in C:\myProject\ class.Database.php on line 24

要启用扩展,请打开php.ini(您可能需要先将php.ini-development复制为php.ini),然后取消注释(或添加)这两行:

extension_dir = "ext"

以及任何您遇到致命错误的扩展,即mysqli:

extension=mysqli


0

在全新安装PHP的,删除;之前extension_dir在php.ini。



0

对于使用docker的任何人,我都遇到了这个问题,并通过使用自己的Dockerfile而不是php:fpm映像解决了该问题:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

经过长时间的分析,我找到了解决该问题的方法。在使用命令行功能正确测试了php安装后,我发现php运行良好,并且可以与mysql数据库一起使用。顺便说一句。您可以使用命令php -f filename.php使用php代码运行代码文件。
因此我意识到,Apache一定有问题。
我仅使用phpinfo()函数制作了一个文件。
在这里,我看到在“
已加载的配置文件 ”行
中未加载我的配置文件,而是提到了(无)。

最后,我在Apache配置中找到了条目

<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

但是我已经安装了PHP 7,因此Apache无法加载php.ini文件,因为没有相应的条目。我加了

<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

重新启动Apache之后,一切正常。

我在httpd-xampp.conf文件中找到了上面的这些代码块。可能它在您配置的其他位置。
在同一个文件中,我更改了php 7的设置,以替换php 5版本。

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadFile "C:/xampp/php/php7ts.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

如您所见,我已经安装了xampp软件包,但是这个问题只是在Apache方面。


0

通过PHP安装phpXX-extension。就我的FreeBSD而言:

pkg install php74-extensions

0

我正在使用xampp,重命名后我的问题已解决:

extension_dir = "ext"

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

PS:进行更改后,请不要忘记重新启动apache!


-1
<?php  /* If the error is due to calling mysqli in a class */

    class dbconnect extends mysqli{

        private $host = 'localhost';
        private $user = 'root';
        private $pass = '';
        private $db = 'test';

        public function __construct() {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);

            if (mysqli_connect_error()) {
                die('Connect Error (' . mysqli_connect_errno() . ') ' .
                    mysqli_connect_error());
            }
        }
    }
?>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.