提问人:Tylor 提问时间:3/21/2009 最后编辑:DharmanTylor 更新时间:4/15/2023 访问量:406487
如何解决“致命错误:找不到类'MySQLi'”?
How to solve "Fatal error: Class 'MySQLi' not found"?
问:
我正在做一个教程,并收到此错误:
致命错误:在第 8 行找不到类“MySQLi”(LONG URL)
第 8 行的代码是:
$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);
我在网上看到有人说看看它是否在我的 phpinfo() 中打开了,但“mysqli”下面没有列出任何内容。
另外,我正在运行PHP版本5.2.5
答:
听起来你只需要安装MySQLi。
如果您认为自己已经这样做了,但仍然有问题,请发布您的操作系统以及可能有助于进一步诊断的任何其他内容。
评论
sudo yum install php-mysqli
sudo yum install php56-mysqlnd.x86_64
您的安装似乎有问题。
- 你安装了MySQLi吗?
- 您是否在php.ini中激活了它?
- 重新启动Apache和/或PHP-FPM?
http://www.php.net/manual/en/mysqli.installation.php
您可以通过执行以下代码来检查 mysqli 库是否存在:
if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
echo 'We don\'t have mysqli!!!';
} else {
echo 'Phew we have it!';
}
评论
除了在 php.ini 中取消注释 php_mysqli.dll 扩展外,还要在 php 中取消注释 extension_dir 指令.ini并指定您的位置:
extension_dir = "C:\software\php\dist\ext"
这使它为我工作。
评论
./ext
php.ini-development
php.ini
extension=php_mysqli.dll
一些发行版(比如Gentoo)支持PHP的多个安装,你必须确保你使用的是安装并启用了mysqli的发行版。
在Gentoo上,我安装了一个新的PHP(启用了mysqli USE标志),但是我需要激活新版本的PHP(因为旧的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
如果您使用的是 Ubuntu,请运行:
sudo apt-get install php-mysqlnd
在此之后不要忘记重新启动 php 服务(Apache 或 php-fpm 取决于设置)。
评论
sudo
apt-get -y install php5-mysql php5-mysqlnd
我的操作系统是 Ubuntu。我通过使用以下方法解决了这个问题:
sudo apt-get install php5-mysql
评论
如果您从命名空间的类中调用“new mysqli(..)”,您可能会看到类似的错误。解决此问题的方法是将其显式设置为根命名空间,并在前面加上反斜杠,如下所示:Fatal error: Class 'foo\bar\mysqli' not found in
<?php
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
评论
我检查了上面的所有内容,它对我不起作用,
我发现了一些步骤。
我在 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,请阅读其他答案以安装它,
打开查找extension_dirphp.ini
就我而言,我必须设置extension_dir = /usr/lib/php5/20121212
并重新启动 apache2 :/ect/init.d/apache2 restart
我想我可能会帮助任何使用 Namesco 服务器遇到同样问题的人。 在将数据库从家用电脑上的本地服务器移动到 namesco 后,我一直在尝试解决这个问题。他们不会提供帮助,他们说这是一个编码问题。
- 但是,从他们的 CPANEl LINUX 主机修复很简单 接口。
- 单击 php。
- 然后单击PHP模块,然后从其预安装模块列表中单击MySQLI框。
- 然后点击保存。(如果代码在另一台服务器上有效,则无需更改代码。
不幸的是,他们的支持文章是浪费时间。读完这篇文章后,我带着新的决心进入了管理界面。
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
如何在php.ini中启用mysqli
- 通过删除 ';' 来编辑/取消注释(冒号)php.ini中的以下配置: 第一个(取消注释并添加配置): 第二个(取消注释): 第三个(取消注释和编辑配置):
include_path = "C:\php\includes"
extension_dir = "ext"
extension=C:/PHP/ext/php_mysql.dll extension=C:/PHP/ext/php_mysqli.dll
- 重新启动 IIS 服务器
- 确保 mysql 正在系统上运行。
如何加载 php.ini 文件
- 将任何一个文件php.ini-production/php.ini-development从C:\PHP重命名为php.ini(注意现在扩展名将是ini,即“php.ini”)。
- 重命名为 php.ini 文件后重新启动服务器
- 查看 http://localhost/phpinfo.php 中的更改
在 Ubuntu 上:
sudo apt-get install php-mysql
sudo service apache2 restart
经过长时间的分析过程,我找到了解决这个问题的方法。
在使用命令行功能正确测试了我的 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 方面。
在全新安装的 PHP 中,删除 php.ini 之前。;
extension_dir
在 Debian 10 上
apt install php-mysql
/etc/init.d/apache2 restart
对于使用 docker 的任何人,我都遇到了这个问题,并使用我自己的 Dockerfile 而不是 php:fpm 映像解决了它:
FROM php:fpm
RUN docker-php-ext-install mysqli
如果你在 Docker 上...
在 php-container RUN 中:
#docker-php-ext-install mysqli
#apachectl restart
安装 phpXX-extension 的 PHP. 在我的 FreeBSD 案例中:
pkg install php74-extensions
我正在使用 xampp,重命名后我的问题就解决了:
extension_dir = "ext"
自
extension_dir = "C:\xampp\php\ext"
PS:进行此更改后不要忘记重新启动apache!
在 php.ini 中:
extension_dir ="c:/wamp64/bin/php/php7.4.9/ext/"
确保PHP版本正确。
- 打开您的 PHP 文件夹。
- 找到 php.ini-development 并打开它。
- 找到
;extension=mysqli
- 删除符号
;
- 保存文件并将文件扩展名从 php.ini-development 更改为 php.ini
- 重新启动服务器并测试代码:
if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
echo 'We don\'t have mysqli!!!';
} else {
echo 'mysqli is installed';
}
- 如果它不起作用,请将 PHP 中的两个extension_dir.ini从“ext”更改为“c:\php\ext” 和 extension=mysqli 到 extension=php_mysqli.dll 然后再次测试 每次测试时记得重置服务器
您所要做的就是转到该文件,然后在第 926 行(取决于版本)删除 #。它应如下所示:php.ini
;extension=ldap
;extension=mbstring
;extension=exif
extension=mysqli
;extension=oci8_12c
;extension=odbc
保存文件并以管理员身份打开控制台 (cmd)。转到路径并输入 。此命令将重新启动服务器。之后,刷新页面,一切正常。Apache24 / bin
httpd -k restart
当我尝试我的 PHP Web 应用程序时,它给了我同样的错误。
通过谷歌搜索,我发现我的安装缺少PHP服务器的MySQL插件。我正在使用 Ubuntu,所以当我尝试 PHP 的 MySQL 插件时,我发现那里有 2 个,
php-mysql
和php<version>-mysql
我发出了命令 - 在我的终端中,我有php7.4,php --version
我再次发出apt install php7.4-mysql
成功了。
此问题也可能是由 .htaccess 文件配置错误引起的。
如果您尝试了上述所有答案,但仍然不走运,请检查系统上安装的软件包的版本号是否真的匹配:
apache2-mod_php7-7.4.33-150200.3.46.2.x86_64
php7-mysql-7.4.33-150200.3.46.2.x86_64
有一次我不得不从不同的存储库进行手动安装,这导致某些库无法加载(尽管他们的配置正常并且他们的 .ini 文件正在解析)。
您也可以尝试使用
php -S <server_ip>:8080
启动测试服务器并查看丢失的模块(mysqli)是否加载到该服务器。如果它出现在 phpinfo 中(并且不出现在您的常规配置中),那么您至少知道在哪里查看......
评论
new mysqli()