Acabei de atualizar para o PHP 7 apenas para descobrir que o WordPress 4.8.1 (versão mais recente) ainda usa mysql_connect no módulo wp-db.php, mas o mysql_connect foi descontinuado.
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 capturado: Chame 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-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} lançado em D: \ ApacheHtdocs \ ConneXions \ wp-includes \ wp-db. php on line 1570
Não acredito que o WordPress diz que recomenda o PHP 7, mas não funciona com ele. O que estou perdendo aqui?
mysql_connect
é usado apenas como fallback quandomysqli
não é detectado. Parece que você nãomysqli
oumysql
instalado (mysqli
é recomendado,mysql
é obsoleto)Respostas:
Parece que você não tem o mysqli instalado e / ou ativado no seu servidor. O IIRC
mysqli
foi adicionado ao php na versão 5.5 e amysql
extensão mais antiga foi preterida e totalmente desativada desde então. Se você atualizou de uma versão PHP muito antiga, pode ser que você ainda precise da etapa extra de ativaçãomysqli
.(o wordpress verifica a existência de
mysqli
e somente se ele não existir tenta asmysql
funções mais antigas .)fonte
Além da resposta do @MarkKaplun, eu posto alguns códigos da classe wpdb:
Aqui está como o
wpdb::use_mysqli
é determinado:É inicializado com:
e depois no
wpdb
construtor, temos:fonte
O que você deve fazer para resolver esse problema é editar o seu arquivo php.ini.
executar onde
php.ini
eu encontrei o meu em:/etc/php/php.ini
(embora eu não saiba em qual SO você está executando, encontre o seu)Procure estes dois arquivos:
e descomente-os. Voila, isso faria o trabalho a qualquer momento.
Leitura adicional: https://wiki.archlinux.org/index.php/PHP
fonte
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 muitos erros envolvendo o nome das extensões PHP (eles não possuem o prefixo php_ e o sufixo .dll). Um deles está relacionado ao mysqli.
A configuração errada que encontrei lá:
A configuração correta (após editar esta linha):
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).
fonte