I have WAMP Server (3.0.6) installed on my Windows 10 computer. I am developing a WordPress site using a few custom MySQL tables, so I'm using $wpdb
.
I was running on PHP 7.0.10, and everything was fine. This morning, I installed PHP 7.1.4, and suddenly I got this error:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in ...\wp-includes\wp-db.php:1573
I dug into it and traced the issue back to the __construct()
function, and this if
statement:
if ( function_exists( 'mysqli_connect' ) ) {
A var_dump showed me that function_exists( 'mysqli_connect' )
is returning false
.
The problem is NOT that I don't have the mysqli
extension enabled:
I have switched back to 7.0.x (and the error disappeared), deleted 7.1.4, reinstalled 7.1.4, and switched back to it. It still doesn't work.
I tried 7.1.0, and it doesn't work.
I've tried toggling the extension on and off, and that changes nothing.
I've tried copying the actual php_mysqli.dll
file from the working 7.0.10 directory, into the 7.1.4 directory, and that doesn't work.
Edit
Per request, I've added screenshots of what is what is showing from phpinfo()
. Under 7.0, I see the info section for mysqli, and under 7.1, the section is missing.
First off, a bit of into about the way that WAMPServer handles php.ini
files. If you use phpinfo()
, you may notice that the path to the loaded ini
file is NOT the ini
file in the PHP installation. It instead points to the Apache installation.
But if you look at it, it's a 0KB
symlink. What is actually is is a link to an ini
file in the PHP installation. But it isn't the php.ini
, it instead points to phpForApache.ini
. So this:
...\wamp64\bin\apache\apache2.4.23\bin\php.ini
is actually
...\wamp64\bin\php\php[VERSION]\phpForApache.ini
So, you can ignore what is in the Apache folder and focus on your ini
files in the PHP folder. However, you can't ignore the php.ini
. You need to correct both.
Kudos to Jon Stirling to suggesting checking the loaded configuration file in phpInfo()
.
I installed PHP 7.1 from the PHP website, and forgot to transfer my ini
files over from the PHP 7.0 installation. I instead used the default ini
files provided by the PHP website.
That didn't work, because there are tweaks in the ini
files that are needed to make PHP work with WAMP. So I copied the two ini
files over from my 7.0.x folder, and then it started working, mostly, except for the error with mysqli.
After scratching at this for an hour, Fred -ii-'s last question finally got me to the answer. I had PHP trying to reference old extension files. Here is why:
The php.ini
file and the phpForApache.ini
file, provided by WAMP, both hard code some paths. For example, the extensions folder path for PHP 7.0.10 is coded as this:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
I had copied the ini
files over, but they were pointing to the extension folder for 7.0. The dll
files for 7.0.x don't work with 7.1.x.
I went into the two files (php.ini
phpForApache.ini
) in the PHP 7.1.4 folder, and globally replaced all instances of the text "7.0.10" to "7.1.4". And now it's all working.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With