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

Posted

技术标签:

【中文标题】致命错误:调用未定义函数 mysqli_connect()【英文标题】:Fatal error: Call to undefined function mysqli_connect() 【发布时间】:2019-09-24 01:15:20 【问题描述】:

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

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

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

为什么我会收到错误消息?它可以在旧服务器上运行,我认为代码不是问题,因为它可以在 localhost 上运行,而在新服务器上则不行。谁能帮帮我?

【问题讨论】:

看起来你的服务器 mysqli 扩展没有启用。检查mysqli是否启用phpinfo() 请开启mysqli扩展 我按照以下链接解决了我的问题:askubuntu.com/questions/773601/… 如果你来自 php Storm -> intellij-support.jetbrains.com/hc/en-us/community/posts/… 或 web.archive.org/web/20200805054537/https://… 【参考方案1】:

简单地做

sudo apt install php-mysqli

完美运行,并且与版本无关

【讨论】:

它的工作原理在我的情况下,我必须运行 sudo apt-get install php5.6-mysql 然后重新启动 apache sudo service apache2 restart @ScottyBlades 仅尝试sudo apt。我进行了相应的编辑 像魅力一样工作! 在 Lubuntu 21.04 和 PHP 7.4 上与我合作【参考方案2】:

如果您自己托管服务器,请在 php.ini 文件中删除扩展名前面的分号 extension=php_mysqli.dll

【讨论】:

另外,请始终检查您的 PHP 和 Apache 错误日志。我用“#”代替“;”在 php.ini 中标记注释并从网页得到奇怪的错误(包括“调用未定义的函数 mysqli_connect()”)。 extension=mysqli【参考方案3】:

对于CentOS,执行:

sudo yum install php-mysqli

【讨论】:

没有包 php-mysqli 可用。 CentOS 6.9 版(最终版)。我该怎么办? 是的,我也收到了同样的消息“没有可用的包 php-mysqli”,怎么办? 我建议在 Centos 7 上使用 IUS repo for php 5.6。阅读ius.io的文档【参考方案4】:

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

apt-get install php5-mysql

【讨论】:

此外,如果您使用的是 Ubuntu/Debian,请检查“/etc/php5/apache2/php.ini”文件中的扩展“extension=mysqli.so”是否已启用(未注释)。然后重启服务器“service apache2 restart”。 这不适用于 Ubuntue E: Package 'php5-mysql' has no installation candidate【参考方案5】:

默认情况下不使用 php 扩展时发生。在您的 php.ini 文件中,将;extension=php_mysql.dll 更改为 extension=php_mysql.dll。 **如果记录此错误,则添加此 dll 文件的路径,例如extension=C:\Php\php-???-nts-Win32-VC11-x86\ext\php_mysql.dllphp_mysqli.dllphp_pdo_mysql.dll 执行相同操作。保存并再次运行您的代码。

【讨论】:

同时重启 Apache。【参考方案6】:

如果您安装了模块并正确设置了 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"

【讨论】:

【参考方案7】:

我在 centos7 上的 php7 有点不同。

在 /etc/php.ini 中

;扩展=mysqli

extension=mysqli

【讨论】:

类似change 用于archlinux,在/etc/php/php.ini 中取消注释。【参考方案8】:

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

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

AddHandler application/x-httpd-php .php
PHPIniDir "<path-to-folder-where-php-ini-lives>"

【讨论】:

【参考方案9】:

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

apt-get install php5-mysql

安装客户端后,应重新启动网络服务器。如果您使用的是 apache,以下应该可以工作:

sudo service apache2 restart

【讨论】:

【参考方案10】:

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

sudo phpenmod mysqli

【讨论】:

嗯,这给了我一些新信息......但它似乎没有默认安装在 WSL Ubuntu 18 上......'警告:模块 mysqli ini 文件在 /etc/ 下不存在php/7.2/mods-available' 如果sudo apt-get install php7.2-mysqli缺少可以安装【参考方案11】:

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

【讨论】:

【参考方案12】:

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

<?php 

phpinfo();

【讨论】:

【参考方案13】:

所以这对你来说可能不是问题,但我一直在努力解决这个错误。我发现了导致我的问题的原因,但我无法真正解释原因。

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

在努力从这个“PHP 致命错误”中找出是什么给了我“错误 500”白屏之后,我浏览了代码并在 PHP 手册 (@987654321) 建议的错误处理中偶然发现了这段代码@)。

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

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

【讨论】:

【参考方案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

【讨论】:

以上是关于致命错误:调用未定义函数 mysqli_connect()的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:未捕获的错误:调用 C:\xampp\htdocs\ 中未定义的函数 mysql_connect()

致命错误:在 php 中调用未定义函数 fetch_assoc()

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

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

致命错误:调用未定义的函数 imagewebp() [关闭]

PHPmyadmin 问题 - 致命错误:未捕获错误:调用未定义函数 mb_detect_encoding()