WordPress 4.8.1 usa mysql_connect que não funciona com o PHP 7

8

Acabei de atualizar para o PHP 7 apenas para descobrir que o WordPress 4.8.1 (versão mais recente) ainda usa o mysql_connect no módulo wp-db.php, mas o mysql_connect foi preterido.

O código a seguir é obtido de wp-db-php, linhas 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);
}

Aqui está a saída quando tento executar meu programa:

  

Erro fatal: Erro não detectado: Chamar para a função indefinida mysql_connect () em D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db.php: 1570
  Rastreio de pilha:
  # 0 D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db.php (658): wpdb- > db_connect ()
  # 1 D: \ ApacheHtdocs \ ConneXions \ wp -inclui \ 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} lançado em D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db.php na linha 1570

Não acredito que o WordPress recomende o PHP 7, mas não funciona com ele. O que estou perdendo aqui?

    
por Bob Jones 05.08.2017 / 21:58

4 respostas

8

Parece que você não tem mysqli instalado e / ou habilitado em seu servidor. IIRC mysqli foi adicionado ao php na versão 5.5, e a antiga extensão mysql foi preterida e totalmente desativada desde então. Se você atualizou de uma versão muito antiga do PHP, pode ser que você ainda precise da etapa extra de ativar mysqli .

(o wordpress verifica a existência de mysqli e, somente se não existir, tenta as funções mysql mais antigas.)

    
por Mark Kaplun 05.08.2017 / 22:25
4

Além da resposta @MarkKaplun, eu publico um código da classe wpdb:

Veja como o wpdb::use_mysqli é determinado:

É iniciado com:

/**
 * Whether to use mysqli over mysql.
 *
 * @since 3.9.0
 * @access private
 * @var bool
 */
private $use_mysqli = false;

e, em seguida, no construtor wpdb , temos:

/* 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;
        }
}
    
por birgire 05.08.2017 / 22:35
2

O que você deve fazer para resolver este problema, é editar o seu arquivo php.ini.

execute onde é php.ini Eu encontrei o meu em:

/etc/php/php.ini (embora eu não saiba qual sistema operacional você está executando, encontre o seu)

Procure esses dois arquivos:

extension=pdo_mysql.so
extension=mysqli.so

e descomente-os. Voila, que faria o trabalho a qualquer momento.

Leitura adicional: enlace

    
por Lawrence Oputa 16.11.2017 / 13:39
1

Você está usando o Xamppp 7.x para Windows?

Aconteceu comigo quando atualizei meu Xampp 5.6 para o Xampp 7.1. Inspecionando o arquivo de configuração C: \ Xampp \ php \ php.ini, notei um monte de erros envolvendo o nome de extensões PHP (eles não possuem o prefixo php_ e o sufixo .dll). Um deles estava relacionado ao mysqli.

Em vez da configuração correta abaixo:

extension=php_mysqli.dll

Eu encontrei esta configuração errada:

extension=mysqli

Corrigir isso resolveu meu problema.

A propósito: não esqueça de corrigir todas as outras configurações erradas (o nome correto das extensões pode ser visto em C: \ xampp \ php \ ext).

    
por aldemarcalazans 07.03.2018 / 22:44

Tags