WordPress 4.8.1 folosește mysql_connect care nu funcționează cu PHP 7
Tocmai am actualizat la PHP 7 doar pentru a descoperi că WordPress 4.8.1 (ultima versiune) încă folosește mysql_connect în modulul wp-db.php, dar mysql_connect a fost depreciat.
Următorul cod este preluat din wp-db-php, rândurile 1567-1571:
if ( WP_DEBUG ) {
$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
} else {
$this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword,
$new_link, $client_flags);
}
Iată rezultatul când încerc să rulez programul meu:
Eroare fatală: Eroare neprinsă: Apel la funcție nedefinită mysql_connect() în D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php:1570
Stack trace:
#0 D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php(658): wpdb->db_connect()
#1 D:\ApacheHtdocs\ConneXions\wp-includes\load.php(404): wpdb->__construct('root', '', 'connexions', 'localhost')
#2 D:\ApacheHtdocs\ConneXions\wp-settings.php(106): require_wp_db()
#3 D:\ApacheHtdocs\ConneXions\wp-config.php(104): require_once('D:\ApacheHtdocs...')
#4 D:\ApacheHtdocs\ConneXions\wp-load.php(37): require_once('D:\ApacheHtdocs...')
#5 D:\ApacheHtdocs\ConneXions\wp-blog-header.php(13): require_once('D:\ApacheHtdocs...')
#6 D:\ApacheHtdocs\ConneXions\index.php(17): require('D:\ApacheHtdocs...')
#7 {main} aruncat în D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php pe linia 1570
Nu pot să cred că WordPress spune că recomandă PHP 7, dar nu funcționează cu el. Ce îmi scapă aici?

Se pare că nu ai mysqli instalat și/sau activat pe serverul tău. Dacă îmi amintesc corect, extensia mysqli
a fost adăugată în PHP începând cu versiunea 5.5, iar vechea extensie mysql
a fost depreciată și ulterior eliminată. Dacă ai făcut upgrade de la o versiune foarte veche de PHP, este posibil să fie necesar să activezi manual extensia mysqli
.
(WordPress verifică existența extensiei mysqli
și doar dacă aceasta nu există, încearcă să utilizeze funcțiile mai vechi din mysql
.)

@CJDennis, exact asta am spus și eu referitor la învechire. Dacă crezi că este o greșeală în engleza mea, ești mai mult decât binevenit să editezi răspunsul ;)

În plus față de răspunsul lui @MarkKaplun, postez niște cod din clasa wpdb:
Iată cum este determinat wpdb::use_mysqli
:
Este inițializat cu:
/**
* Dacă să folosească mysqli în loc de mysql.
*
* @since 3.9.0
* @access private
* @var bool
*/
private $use_mysqli = false;
și apoi în constructorul wpdb
avem:
/* Folosește ext/mysqli dacă există și:
* - WP_USE_EXT_MYSQL este definit ca false, sau
* - Suntem pe o versiune de dezvoltare a WordPress, sau
* - Folosim PHP 5.5 sau mai mare, sau
* - ext/mysql nu este încărcat.
*/
if ( function_exists( 'mysqli_connect' ) ) {
if ( defined( 'WP_USE_EXT_MYSQL' ) ) {
$this->use_mysqli = ! WP_USE_EXT_MYSQL;
} elseif ( version_compare( phpversion(), '5.5', '>=' ) || ! function_exists( 'mysql_connect' ) ) {
$this->use_mysqli = true;
} elseif ( false !== strpos( $GLOBALS['wp_version'], '-' ) ) {
$this->use_mysqli = true;
}
}

Ce ar trebui să faci pentru a rezolva această problemă este să editezi fișierul php.ini.
Rulează comanda pentru a afla locația php.ini
Eu l-am găsit la:
/etc/php/php.ini
(deși nu știu ce sistem de operare folosești, pur și simplu găsește-l pe al tău)
Caută aceste două linii:
extension=pdo_mysql.so
extension=mysqli.so
și decomentează-le. Voilà, asta ar rezolva problema oricând.
Lectură suplimentară: https://wiki.archlinux.org/index.php/PHP

Folosești Xampp 7.x pentru Windows?
Mi s-a întâmplat același lucru când am actualizat de la Xampp 5.6 la Xampp 7.1. Inspectând fișierul de configurare C:\Xampp\php\php.ini, am observat multe erori legate de numele extensiilor PHP (lipsește prefixul php_ și sufixul .dll). Una dintre ele este legată de mysqli.
Setarea greșită pe care am găsit-o acolo:
extension=mysqli
Setarea corectă (după editarea acestei linii):
extension=php_mysqli.dll
Corectarea acestei setări mi-a rezolvat problema.
Apropo: nu uita să corectezi și celelalte setări incorecte (numele corect al extensiilor poate fi văzut în directorul C:\xampp\php\ext).
