WordPress 4.8.1 utilizza mysql_connect che non funziona con PHP 7
Ho appena effettuato l'aggiornamento a PHP 7 solo per scoprire che WordPress 4.8.1 (ultima versione) utilizza ancora mysql_connect nel modulo wp-db.php, ma mysql_connect è stata deprecata.
Il seguente codice è tratto da wp-db-php, righe 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);
}
Ecco l'output quando provo a eseguire il mio programma:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in 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} thrown in D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php on line 1570
Non riesco a credere che WordPress dica di raccomandare PHP 7, ma non funziona con esso. Cosa mi sfugge?

Sembra che tu non abbia mysqli installato e/o abilitato sul tuo server. Se non ricordo male, mysqli
è stato aggiunto a PHP nella versione 5.5, e la vecchia estensione mysql
era già deprecata e completamente rimossa da allora. Se hai effettuato l'aggiornamento da una versione molto vecchia di PHP, potrebbe essere necessario un passaggio aggiuntivo per abilitare mysqli
.
(WordPress verifica l'esistenza di mysqli
e solo se non esiste prova a utilizzare le vecchie funzioni mysql
.)

@CJDennis, questo è esattamente ciò che ho detto riguardo alla deprecazione. Se pensi ci sia un errore nel mio inglese, sei più che benvenuto a modificare la risposta ;)

In aggiunta alla risposta di @MarkKaplun, pubblico del codice dalla classe wpdb:
Ecco come viene determinato wpdb::use_mysqli
:
Viene inizializzato con:
/**
* Se utilizzare mysqli invece di mysql.
*
* @since 3.9.0
* @access private
* @var bool
*/
private $use_mysqli = false;
e poi nel costruttore wpdb
abbiamo:
/* Usa ext/mysqli se esiste e:
* - WP_USE_EXT_MYSQL è definito come false, oppure
* - Siamo in una versione di sviluppo di WordPress, oppure
* - Stiamo eseguendo PHP 5.5 o superiore, oppure
* - ext/mysql non è caricato.
*/
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;
}
}

Ciò che dovresti fare per risolvere questo problema è modificare il tuo file php.ini.
Esegui dove si trova php.ini
Io ho trovato il mio in:
/etc/php/php.ini
(anche se non so quale sistema operativo stai utilizzando, trova semplicemente il tuo)
Cerca queste due righe:
extension=pdo_mysql.so
extension=mysqli.so
e rimuovi il commento da esse. Voilà, questo dovrebbe risolvere il problema ogni volta.
Ulteriori letture: https://wiki.archlinux.org/index.php/PHP

Stai utilizzando Xampp 7.x per Windows?
Mi è capitato quando ho aggiornato il mio Xampp 5.6 a Xampp 7.1. Analizzando il file di configurazione C:\Xampp\php\php.ini, ho notato molti errori riguardanti il nome delle estensioni PHP (mancano il prefisso php_ e il suffisso .dll). Uno di questi è relativo a mysqli.
L'impostazione errata che ho trovato:
extension=mysqli
L'impostazione corretta (dopo aver modificato questa riga):
extension=php_mysqli.dll
Correggendo questo ho risolto il mio problema.
A proposito: non dimenticare di correggere tutte le altre impostazioni errate (il nome corretto delle estensioni può essere visto in C:\xampp\php\ext).
