致命错误:调用未定义的函数 mysqli_connect()

Fatal error: Call to undefined function mysqli_connect()

提问人:Emi 提问时间:8/13/2014 最后编辑:DharmanEmi 更新时间:5/29/2023 访问量:317173

问:

2 天来,我一直在尝试解决这个问题,但不幸的是没有结果。让我告诉你我关于这个问题的故事。我已经在一个网站上建立了一个应用程序,该应用程序处理评论。但是,我正在尝试将其放在另一个站点上,并且我从旧站点复制了 php 文件和 sql 文件,并将它们移动到新站点(它们位于不同的 FTP 服务器上)。当我尝试从应用程序转到页面时,我收到以下致命错误:

致命错误:调用未定义的函数 mysqli_connect()

我编写的用于连接到数据库的代码是这样的(使用隐藏的凭据):

$con = mysqli_connect("","*the_name*","*the_pass*","*the_database*");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

为什么会出现错误?它可以在旧服务器上工作,我认为代码不是问题,因为它可以在本地主机上运行,而在新服务器上则不然。谁能帮我?

PHP MySQLI

评论

7赞 bansi 8/13/2014
在服务器 Mysqli 扩展中查找行未启用。检查是否启用了 MySQLIphpinfo()
1赞 Agha Umair Ahmed 8/13/2014
请启用 mysqli 扩展
0赞 Kodali444 2/13/2020
我按照下面的链接解决了我的问题:askubuntu.com/questions/773601/...
0赞 Soner from The Ottoman Empire 11/1/2020
如果您来自 PHP Storm -> intellij-support.jetbrains.com/hc/en-us/community/posts/... 或 web.archive.org/web/20200805054537/https://...

答:

1赞 Utkarsh Dixit 8/13/2014 #1

没有错误,但您的计算机上未安装 mysqli PHP 扩展。请与您的服务提供商联系以解决此问题。

51赞 Dave O'Dwyer 8/13/2014 #2

在 Windows 上,可以通过从 php.ini 文件中删除扩展名开头的分号“;”来启用扩展名extension=php_mysqli.dll

评论

0赞 David Spector 9/14/2018
此外,请务必检查您的 PHP 和 Apache 错误日志。我使用“#”而不是“;”来标记php.ini中的注释,并从网页中收到奇怪的错误(包括“调用未定义的函数mysqli_connect()”)。
6赞 Mahmood Jenami 4/9/2021
或。extension=mysqli
25赞 Zoran 2/4/2016 #3

对于 CentOS,请执行以下操作:

sudo yum install php-mysqli

评论

1赞 Vladyslav Startsev 5/18/2017
没有可用的软件包 php-mysqli。CentOS 发行版 6.9 (Final)。我该怎么办?
0赞 Deepak Rai 5/29/2017
是的,我也收到了相同的消息“没有可用的软件包php-mysqli”,该怎么办?
1赞 Jeff 7/8/2017
我建议在 Centos 7 上使用 php 5.6 的 IUS 存储库。阅读文档,网址为 ius.io
2赞 AaronDanielson 6/3/2016 #4

如果您自己托管服务器,而该服务器恰好是 Apache,即使您在 php.ini 中取消了注释,您也会收到此错误。extension=php_mysqli.dll

您还需要使用 Apache 的 httpd.conf 中的指令告诉 Apache 在哪里可以找到php.iniPHPIniDir

AddHandler application/x-httpd-php .php
PHPIniDir "<path-to-folder-where-php-ini-lives>"
14赞 Rehmat 8/27/2016 #5

在Ubuntu上,我必须安装扩展:php5 mysql

apt-get install php5-mysql

评论

2赞 Rasta 29 9/12/2017
此外,如果您使用的是 Ubuntu/Debian,请检查扩展“extension=mysqli.so”是否在“/etc/php5/apache2/php.ini”文件中启用(未注释)。然后重新启动服务器“service apache2 restart”。
0赞 Mahdy H. 12/19/2021
这在 Ubuntue 上不起作用E: Package 'php5-mysql' has no installation candidate
0赞 amihart 9/14/2022
您必须安装 X 依赖的 phpX-mysql。就我而言,我运行了“php -v”,看到我的PHP版本是7.4,并执行了“sudo apt install php7.4-mysql”。你也可以做 “sudo apt-cache search php |grep mysql“以查看可用的版本。
9赞 RemyG 9/26/2016 #6

当默认情况下不使用 php 扩展时发生。在 php.ini 文件中,更改


.

**如果此错误记录,则添加此 dll 文件的路径,例如


Do same for and 。保存并再次运行代码。
;extension=php_mysql.dllextension=php_mysql.dllextension=C:\Php\php-???-nts-Win32-VC11-x86\ext\php_mysql.dllphp_mysqli.dllphp_pdo_mysql.dll

评论

2赞 dazed 9/15/2017
同时重新启动 Apache。
7赞 James John McGuire 'Jahmic' 11/5/2016 #7

如果您已安装该模块并设置了 PHP。INI 文件,请正确检查您的 apache 错误日志,了解如下内容:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\\php\\ext\\php_mysqli.dll' - The specified module could not be found.

在这种情况下,您的扩展目录不是您想象的那样。您可以明确设置它,如下所示:

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

评论

0赞 Marco Sulla 1/19/2023
这就是我的情况,谢谢。PS:如php.ini所述,在Windows和其他系统上添加就足够了。extension_dir = "ext"extension_dir = "./"
1赞 Goldbug 7/19/2017 #8

Mysqli 未安装在新服务器上。运行 phpinfo() 进行确认。

<?php 

phpinfo();
70赞 João Pimentel Ferreira 12/24/2017 #9

干脆去做

sudo apt install php-mysqli

它运行良好,并且与版本无关

评论

4赞 Noe Miranda Franco 6/23/2018
它有效,谢谢,就我而言,我必须运行sudo apt-get install php5.6-mysql,然后重新启动apache sudo service apache2 restart
0赞 João Pimentel Ferreira 10/1/2019
@ScottyBlades尝试只是.我相应地编辑了sudo apt
3赞 Mohamad Osama 1/6/2018 #10

在 Raspberry Pi 上,我必须安装 php5 mysql 扩展。

apt-get install php5-mysql

安装客户端后,应重新启动 Web 服务器。如果您使用的是 apache,则应执行以下操作:

sudo service apache2 restart

评论

0赞 Neal Barsch 1/27/2023
重新启动 apache 对我有用 ubuntu 常规非 raspi,谢谢
2赞 Yu Jiaao 5/25/2018 #11

如果您使用 Ubuntu 16.04(可能及更高版本),您已经拥有此模块,但默认情况下未启用。只需这样做:

sudo phpenmod mysqli

评论

0赞 Dan Ciborowski - MSFT 4/9/2020
好吧,这给了我一些新信息......但似乎默认情况下它没有安装在 WSL Ubuntu 18 上......“警告:模块mysqli ini文件在/etc/php/7.2/mods-available下不存在”
1赞 Yu Jiaao 4/9/2020
如果缺少,您可以安装它sudo apt-get install php7.2-mysqli
5赞 David Menache 4/22/2019 #12

我的 php7 在 centos7 上有点不同。

在 /etc/php.ini

;扩展名 = mysqli

扩展名 = mysqli

评论

1赞 Justin Dalrymple 3/24/2020
archlinux 也有类似的变化,在 /etc/php/php.ini 中取消注释。
1赞 willy 9/19/2019 #13

所以这对你来说可能不是问题,但我正在为这个错误而苦苦挣扎。我发现了导致我问题的原因,尽管我无法真正解释为什么。

对我来说,mysqli_connect在任何不同子目录中的页面上建立连接的地方工作正常。但是,由于某种原因,根目录中的页面上引用的相同代码返回了此错误。奇怪的是,它在根目录中MAMP的本地主机环境中运行良好,但是在我的共享主机上却没有。

在努力弄清楚是什么从这个“PHP致命错误”中给我“错误500”白屏之后,我浏览了代码,并在PHP手册(https://www.php.net/manual/en/mysqli.error.php)建议的错误处理中偶然发现了这段代码。

if (!mysqli_query($link, "SET a=1")) {
    printf("Error message: %s\n", mysqli_error($link));
}

我随机决定删除它,瞧,连接到在根目录中工作的数据库。也许比我聪明的人可以解释这一点,对于任何在类似问题上苦苦挣扎的人。

1赞 Kodali444 2/13/2020 #14

我按照下面的链接解决了这个问题。确保启用以下模块。
php -r 'phpinfo();' |grep -i mysqli
链接 : https://askubuntu.com/questions/773601/php-mysqli-extension-in-ubuntu-16-04-not-working-after-upgrade-to-version-7-0-6

-1赞 smartrahat 5/15/2023 #15

在我的 Windows 11 中,我使用的是 XAMPP 8.2.4

就我而言,它位于文件夹内php.ini<drive-latter>:\xampp\php\windowsXamppPhp

扩展看起来像这样;extension=mysqli

只需删除并重新启动服务器即可。;

加法:

当我在 Laravel 项目的终端中使用时,它正在使用文件。php artisan serve<drive-latter>:\xampp\php\windowsXamppPhp\php.ini

当我使用地址栏时,它使用的是文件。localhost/project_name/public<drive-latter>:\xampp\php\php.ini

您还可以在终端中运行,以查看 PHP 在 CLI 模式下使用哪些文件。php --ini

0赞 jiminy 5/29/2023 #16

如果尝试使用 Docker 和 devcontainer.json 设置 GitHub Codespaces,请将 Dockerfile 更新为以下内容,最后一行“RUN”是关键行。

FROM mcr.microsoft.com/vscode/devcontainers/php:0-8.2

# Install system dependencies
RUN apt-get update && apt-get upgrade -y

# Install MySQL extension
RUN docker-php-ext-install mysqli pdo_mysql && docker-php-ext-enable mysqli