PHP 7.1.x - mysqli_connect 未定义(扩展已打开)
PHP 7.1.x - mysqli_connect Isn't Defined (Extension is turned on)
背景
我的 Windows 10 计算机上安装了 WAMP 服务器 (3.0.6)。我正在使用一些自定义 MySQL 表开发一个 WordPress 网站,所以我使用 $wpdb
.
问题
我在 PHP 7.0.10 上 运行,一切正常。今天早上安装了PHP 7.1.4,突然报错:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in ...\wp-includes\wp-db.php:1573
我深入研究并将问题追溯到 __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 的信息部分,而在 7.1 下,该部分丢失了。
背景
首先,了解一下 WAMPServer 处理 php.ini
文件的方式。如果您使用 phpinfo()
,您可能会注意到加载的 ini
文件的路径是 而不是 PHP 中的 ini
文件安装。它而是指向 Apache 安装。
但如果你看一下,它是一个 0KB
symlink。实际上是 PHP 安装中的 link 到 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-'s 终于找到了答案。我 PHP 试图引用旧的扩展文件。原因如下:
WAMP提供的php.ini
文件和phpForApache.ini
文件都硬编码了一些路径。例如,PHP 7.0.10 的扩展文件夹路径编码为:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
我已经复制了 ini
文件,但它们指向 7.0 的扩展文件夹。 7.0.x 的 dll
文件不适用于 7.1.x.
回答
我进入 PHP 7.1.4 文件夹中的两个文件 (php.ini
phpForApache.ini
),并将文本“7.0.10”的所有实例全局替换为“ 7.1.4"。现在一切正常了。
背景
我的 Windows 10 计算机上安装了 WAMP 服务器 (3.0.6)。我正在使用一些自定义 MySQL 表开发一个 WordPress 网站,所以我使用 $wpdb
.
问题
我在 PHP 7.0.10 上 运行,一切正常。今天早上安装了PHP 7.1.4,突然报错:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in ...\wp-includes\wp-db.php:1573
我深入研究并将问题追溯到 __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 的信息部分,而在 7.1 下,该部分丢失了。
背景
首先,了解一下 WAMPServer 处理 php.ini
文件的方式。如果您使用 phpinfo()
,您可能会注意到加载的 ini
文件的路径是 而不是 PHP 中的 ini
文件安装。它而是指向 Apache 安装。
但如果你看一下,它是一个 0KB
symlink。实际上是 PHP 安装中的 link 到 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-'s
WAMP提供的php.ini
文件和phpForApache.ini
文件都硬编码了一些路径。例如,PHP 7.0.10 的扩展文件夹路径编码为:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
我已经复制了 ini
文件,但它们指向 7.0 的扩展文件夹。 7.0.x 的 dll
文件不适用于 7.1.x.
回答
我进入 PHP 7.1.4 文件夹中的两个文件 (php.ini
phpForApache.ini
),并将文本“7.0.10”的所有实例全局替换为“ 7.1.4"。现在一切正常了。