Je viens de passer à PHP 7 uniquement pour constater que WordPress 4.8.1 (dernière version) utilise toujours mysql_connect dans le module wp-db.php, mais mysql_connect est obsolète.
Le code suivant est extrait de wp-db-php, lignes 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);
}
Voici le résultat lorsque j'essaie d'exécuter mon programme:
Erreur fatale: Erreur non capturée: appel de la fonction non définie mysql_connect () dans D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php: 1570
Trace de la pile:
# 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 {principal} jeté dans D:\ApacheHtdocs\ConneXions\wp-includes\wp-db.php à la ligne 1570
Je ne peux pas croire que WordPress recommande PHP 7, mais cela ne fonctionne pas. Qu'est-ce que j'oublie ici?
Cela ressemble à de vous ne pas avoir mysqli installé et/ou activé sur votre serveur. IIRC mysqli
a été ajouté à php dans la version 5.5, et l’ancienne extension mysql
était obsolète et totalement supprimée depuis lors. Si vous avez mis à niveau une très ancienne version de PHP, il se peut que vous ayez encore besoin de l'étape supplémentaire d'activation de mysqli
.
(wordpress vérifie l'existence de mysqli
et si ce n'est pas le cas, essaye les anciennes fonctions mysql
.)
En plus de la réponse @MarkKaplun, je poste du code de la classe wpdb:
Voici comment le wpdb::use_mysqli
est déterminé:
Il est initalisé avec:
/**
* Whether to use mysqli over mysql.
*
* @since 3.9.0
* @access private
* @var bool
*/
private $use_mysqli = false;
puis dans le constructeur wpdb
, nous avons:
/* Use ext/mysqli if it exists and:
* - WP_USE_EXT_MYSQL is defined as false, or
* - We are a development version of WordPress, or
* - We are running PHP 5.5 or greater, or
* - ext/mysql is not loaded.
*/
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 que vous devriez faire pour résoudre ce problème, est d’éditer votre fichier php.ini.
run où est php.ini
J'ai trouvé le mien à:
/etc/php/php.ini
(bien que je ne sache pas quel SE vous utilisez, trouvez le vôtre)
Recherchez ces deux fichiers:
extension=pdo_mysql.so
extension=mysqli.so
et décommentez-les. Voilà, le travail serait fait à tout moment.
Lectures supplémentaires: https://wiki.archlinux.org/index.php/PHP
Utilisez-vous Xamppp 7.x pour Windows?
C'est ce qui m'est arrivé lorsque j'ai mis à niveau mon Xampp 5.6 vers Xampp 7.1. En inspectant le fichier de configuration C:\Xampp\php\php.ini , j’ai remarqué beaucoup d’erreurs impliquant le nom des extensions PHP (il leur manque le préfixe php_ et le suffixe .dll). L'un d'eux est lié à mysqli.
Le mauvais réglage que j'ai trouvé là:
extension=mysqli
Le bon réglage (après avoir édité cette ligne):
extension=php_mysqli.dll
Corriger cela a résolu mon problème.
Soit dit en passant: n'oubliez pas de corriger tous les autres paramètres incorrects (le nom correct des extensions est visible dans C:\xampp\php\ext).