数据库
首页 > 数据库> > PHP 7.1.x – mysqli_connect未定义(扩展已打开)

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

作者:互联网

背景

我的Windows 10计算机上安装了WAMP Server(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.

enter image description here

不是答案

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

enter image description here

enter image description here

enter image description here

我试过的事情

我已切换回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下,该部分缺失.

enter image description here
enter image description here

解决方法:

背景

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

enter image description here

但是如果你看一下,它就是一个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文件.

这不起作用,因为在使用WAMP使PHP工作所需的ini文件中有一些调整.所以我从我的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的扩展文件夹. 7.0.x的dll文件不适用于7.1.x.

回答

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

标签:php,mysqli,wampserver,php-7-1
来源: https://codeday.me/bug/20190622/1265215.html