提问人:Emi 提问时间:8/13/2014 最后编辑:DharmanEmi 更新时间:5/29/2023 访问量:317173
致命错误:调用未定义的函数 mysqli_connect()
Fatal error: Call to undefined function mysqli_connect()
问:
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();
}
为什么会出现错误?它可以在旧服务器上工作,我认为代码不是问题,因为它可以在本地主机上运行,而在新服务器上则不然。谁能帮我?
答:
没有错误,但您的计算机上未安装 mysqli PHP 扩展。请与您的服务提供商联系以解决此问题。
在 Windows 上,可以通过从 php.ini 文件中删除扩展名开头的分号“;”来启用扩展名extension=php_mysqli.dll。
评论
extension=mysqli
对于 CentOS,请执行以下操作:
sudo yum install php-mysqli
评论
如果您自己托管服务器,而该服务器恰好是 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>"
在Ubuntu上,我必须安装扩展:php5 mysql
apt-get install php5-mysql
评论
E: Package 'php5-mysql' has no installation candidate
当默认情况下不使用 php 扩展时发生。在 php.ini 文件中,更改
为
.
**如果此错误记录,则添加此 dll 文件的路径,例如
Do same for and 。保存并再次运行代码。;extension=php_mysql.dll
extension=php_mysql.dll
extension=C:\Php\php-???-nts-Win32-VC11-x86\ext\php_mysql.dll
php_mysqli.dll
php_pdo_mysql.dll
评论
如果您已安装该模块并设置了 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"
评论
extension_dir = "ext"
extension_dir = "./"
Mysqli 未安装在新服务器上。运行 phpinfo() 进行确认。
<?php
phpinfo();
干脆去做
sudo apt install php-mysqli
它运行良好,并且与版本无关
评论
sudo apt
在 Raspberry Pi 上,我必须安装 php5 mysql 扩展。
apt-get install php5-mysql
安装客户端后,应重新启动 Web 服务器。如果您使用的是 apache,则应执行以下操作:
sudo service apache2 restart
评论
如果您使用 Ubuntu 16.04(可能及更高版本),您已经拥有此模块,但默认情况下未启用。只需这样做:
sudo phpenmod mysqli
评论
sudo apt-get install php7.2-mysqli
我的 php7 在 centos7 上有点不同。
在 /etc/php.ini
;扩展名 = mysqli
自
扩展名 = mysqli
评论
所以这对你来说可能不是问题,但我正在为这个错误而苦苦挣扎。我发现了导致我问题的原因,尽管我无法真正解释为什么。
对我来说,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));
}
我随机决定删除它,瞧,连接到在根目录中工作的数据库。也许比我聪明的人可以解释这一点,对于任何在类似问题上苦苦挣扎的人。
我按照下面的链接解决了这个问题。确保启用以下模块。
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
在我的 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
如果尝试使用 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
评论
phpinfo()