【问题标题】:PHP 7.1.x - mysqli_connect Isn't Defined (Extension is turned on)PHP 7.1.x - mysqli_connect 未定义(扩展已打开)
【发布时间】:2017-10-06 11:49:40
【问题描述】:

背景

我的 Windows 10 计算机上安装了 WAMP 服务器 (3.0.6)。我正在使用一些自定义 MySQL 表开发一个 WordPress 网站,所以我使用的是$wpdb

问题

我在 PHP 7.0.10 上运行,一切都很好。今天早上,我安装了PHP 7.1.4,突然出现这个错误:

致命错误:未捕获错误:调用 ...\wp-includes\wp-db.php:1573 中的未定义函数 mysql_connect()

我深入研究并将问题追溯到__construct() 函数,以及这个if 声明:

if ( function_exists( 'mysqli_connect' ) ) {

var_dump 显示 function_exists( 'mysqli_connect' ) 正在返回 false

不是答案

问题是不是我没有启用mysqli 扩展:

我尝试过的事情

我已经切换回 7.0.x(错误消失了),删除了 7.1.4,重新安装了 7.1.4,然后又切换回了它。还是不行。

我试过7.1.0,还是不行。

我尝试打开和关闭扩展程序,但没有任何改变。

我尝试将实际的 php_mysqli.dll 文件从工作 7.0.10 目录复制到 7.1.4 目录中,但不起作用。

编辑

根据要求,我添加了来自phpinfo() 的屏幕截图。在 7.0 下,我看到了 mysqli 的 info 部分,而在 7.1 下,该部分丢失了。

【问题讨论】:

  • 有趣的是,您决定删除实际的错误消息...
  • phpinfo() 说什么?
  • 在谷歌搜索“WP_USE_EXT_MYSQL”后,因为它在您添加的屏幕截图中,我发现了这个问答wordpress.stackexchange.com/questions/160889/wp-use-ext-mysql - 这个答案wordpress.stackexchange.com/a/237413 状态 “将 WP_USE_EXT_MYSQL 常量设置为 true 会导致 WordPress 使用MySQL 扩展而不是 MySQLi 扩展"。另请参阅那里的其他答案。
  • @AndyMercer 好吧,安迪,我很困惑。我唯一能想到的要问的是;新安装后你重启了吗?您是否指示安装使用包括该路径在内的新旧系统文件?
  • “我知道了!” - 你的意思是"By George, I've got it!" ;-)

标签: php mysqli wampserver php-7.1


【解决方案1】:

背景

首先,了解一下 WAMPServer 处理 php.ini 文件的方式。如果您使用phpinfo(),您可能会注意到加载的ini 文件的路径不是 PHP 安装中的ini 文件。相反,它指向 Apache 安装。

但如果你看一下,它是一个0KB 符号链接。实际上是指向 PHP 安装中的 ini 文件的链接。但它不是php.ini,而是指向phpForApache.ini。所以这个:

...\wamp64\bin\apache\apache2.4.23\bin\php.ini

其实是

...\wamp64\bin\php\php[VERSION]\phpForApache.ini

因此,您可以忽略 Apache 文件夹中的内容,而专注于 PHP 文件夹中的 ini 文件。但是,您不能忽略php.ini。您需要更正两者。

感谢Jon Stirling 建议检查phpInfo() 中加载的配置文件。

我做了什么

我从 PHP 网站安装了 PHP 7.1,但忘记从 PHP 7.0 安装传输我的 ini 文件。我改为使用 PHP 网站提供的默认 ini 文件。

那没有用,因为需要在 ini 文件中进行一些调整,以使 PHP 与 WAMP 一起工作。所以我从我的 7.0.x 文件夹中复制了两个 ini 文件,然后它开始工作,主要是除了 mysqli 的错误。

我的问题的根本原因

经过一个小时的努力,Fred -ii-last question 终于让我找到了答案。我让 PHP 试图引用旧的扩展文件。原因如下:

WAMP 提供的php.ini 文件和phpForApache.ini 文件都对一些路径进行了硬编码。例如,PHP 7.0.10 的扩展文件夹路径编码如下:

extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"

我复制了 ini 文件,但它们指向 7.0.0 的扩展文件夹。 7.0.x 的 dll 文件不适用于 7.1.x。

回答

我进入 PHP 7.1.4 文件夹中的两个文件 (php.iniphpForApache.ini),并将文本“7.0.10”的所有实例全局替换为“7.1.4”。现在一切正常。

【讨论】:

  • 酷,我想这就是我提到的in this comment是吗?
  • 确实如此。我在答案中引用了您的评论。感谢您的帮助!
  • 谢谢安迪,不客气。我很高兴看到这个问题得到了解决,干杯!
  • 如果您使用提供的菜单,即wampmanager->php->php.ini 编辑正确的php.ini,您将编辑正确的php.ini 文件
  • 正确,尽管由于符号链接的性质,当您实际编辑当前 PHP 文件夹中的版本时,文本编辑器中显示的文件路径似乎是 Apache 文件夹中的版本。
猜你喜欢
  • 2014-05-14
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2013-06-19
  • 2020-06-29
  • 1970-01-01
  • 2022-01-17
  • 2021-10-27
相关资源
最近更新 更多