PHP 7.1.x-未定义mysqli_connect(扩展已打开)

And*_*cer 5 php mysqli wampserver php-7.1

背景

我在Windows 10计算机上安装了WAMP Server(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' ) ) {
Run Code Online (Sandbox Code Playgroud)

一个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下,则缺少了该部分。

在此处输入图片说明 在此处输入图片说明

And*_*cer 5

背景

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

在此处输入图片说明

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

...\wamp64\bin\apache\apache2.4.23\bin\php.ini
Run Code Online (Sandbox Code Playgroud)

实际上是

...\wamp64\bin\php\php[VERSION]\phpForApache.ini
Run Code Online (Sandbox Code Playgroud)

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

乔恩·斯特林Jon Stirling)建议检查phpInfo()

我做了什么

我从PHP网站安装了PHP 7.1,却忘记ini了从PHP 7.0的安装中转移文件。相反,我使用ini了PHP网站提供的默认文件。

那是行不通的,因为ini要使PHP与WAMP一起使用,需要对文件进行一些调整。因此,我ini从7.0.x文件夹中复制了两个文件,然后大部分开始工作,除了mysqli错误。

我的问题的根本原因

经过一个小时的摸爬滚弗雷德-ii-最后一个问题终于使我得到了答案。我让PHP尝试引用旧的扩展文件。原因如下:

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

extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
Run Code Online (Sandbox Code Playgroud)

我已经复制了ini文件,但是它们指向7.0的扩展文件夹。dll7.0.x 的文件不适用于7.1.x。

回答

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