web-dev-qa-db-fra.com

WordPress 4.8.1 utilise mysql_connect qui ne fonctionne pas avec PHP 7

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?

7
Bob Jones

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.)

8
Mark Kaplun

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;
        }
}
4
birgire

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

2
Lawrence Oputa

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).

2
aldemarcalazans