Como resolver “Erro fatal: Classe 'MySQLi' não encontrada”?


92

Estou fazendo um tutorial e estou recebendo este erro:

Erro fatal: Classe 'MySQLi' não encontrada (LONG URL) na linha 8

O código na linha 8 é:

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);

Eu vi online que alguém disse para ver se ele estava ligado no meu phpinfo (), mas não havia nada listado lá em "mysqli".

Além disso, estou executando o PHP versão 5.2.5


Você pode usar uma classe MYSQLi escrita à mão , então você não precisa instalar o mysqli. É a única solução se você não possui o servidor.
galinhas de

Respostas:


83

Parece que você só precisa instalar o MySQLi .

Se você acha que fez isso e ainda tem um problema, poste seu sistema operacional e qualquer outra coisa que possa ajudar a diagnosticar melhor.


20
No AWS, basta executarsudo yum install php-mysqli
bobobobo

Para mim, foi corrigido com: apt-get install php7.0-mysql. Estou rodando no Raspbian Stretch 9
negrotico19

Na AWS com Amazon Linux, seria algo como sudo yum install php56-mysqlnd.x86_64(escolha aquele que corresponde a qual versão do php você instalou)
auspicious99

46

Você pode verificar se as bibliotecas mysqli estão presentes executando este código:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}

6
Eu ainda recebo "Nós não temos mysqli !!!" mesmo depois de executar `sudo apt-get install php5-mysqlnd`?
Banned_User

Recebo o 'Ufa, mas continuo recebendo o mesmo erro que a classe' msqli 'não foi encontrada em ... alguma ideia?
PA-GW de

36

Se você estiver no Ubuntu , execute:

 sudo apt-get install php5-mysqlnd

5
E não se esqueça de reiniciar o Apache depois disso!
fracz

@fracz Reiniciar o Apache é a parte que esqueci. Eu apenas reiniciei o MySQL. Obrigado.
James

Isso não é o suficiente. Eu ainda estava sem o pacote php5-mysql. Use sudo apt-get -y install php5-mysql php5-mysqlndpara obter ambos. É o que estava faltando, @Hermann Ingjaldsson?
Balmipour de

foi algum erro de configuração. stackoverflow.com/questions/31535173/…
Fzs2

21

Se você estiver chamando "new mysqli (..)" de dentro de uma classe com namespace, poderá ver um erro semelhante Fatal error: Class 'foo\bar\mysqli' not found in. A maneira de corrigir isso é defini-lo explicitamente como o namespace raiz com uma barra invertida anterior, como:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);

1
Essa deve ser a primeira coisa a se olhar.
James Bailey

15

Além de descomentar a extensão php_mysqli.dll em php.ini , também descomente a diretiva extension_dir em php.ini e especifique sua localização:

extension_dir = "C:\software\php\dist\ext"

Isso fez funcionar para mim.


Funcionou para mim, mas com o ./extqual é o caminho relativo. E eu tive que renomear php.ini-developmentpara php.inie descomentar nesse arquivo extension=php_mysqli.dll. Puxa, não senti sua falta PHP.
Overdrivr

O truque aqui para mim (no Windows) era digitar o caminho absoluto para as extensões dir em "extension_dir".
TechNyquist de


2

Como ativar o mysqli no php.ini

  1. Edite / descomente removendo ';' (dois pontos) a seguinte configuração em php.ini: (descomente e adicione configuração): include_path = "C: \ php \ includes" (descomente): extension_dir = "ext" (descomente e editar configuração): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Reinicie o servidor IIS
  3. Certifique-se de que o mysql esteja rodando no sistema.

Como carregar o arquivo php.ini

  1. Renomeie qualquer um dos arquivos php.ini-production / php.ini-development para php.ini de C: \ PHP (observe agora a extensão será ini, ou seja, "php.ini").
  2. Após renomear para o arquivo php.ini, reinicie o servidor
  3. Veja as mudanças em http: //localhost/phpinfo.php

2

Se você estiver no Docker ...

Dentro do php-container RUN:

#docker-php-ext-install mysqli

#apachectl restart

1
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos de um autor, deixe um comentário abaixo de sua postagem. - Da avaliação
Erwan

@ Erwan, na verdade, sim
Seu senso comum,


1

Achei que poderia ajudar alguém com o mesmo problema usando servidores Namesco. Tenho tentado corrigir esse problema depois de mover um banco de dados do meu servidor local no pc doméstico para o namesco. Eles não quiseram ajudar, pois disseram que era um problema de codificação.

  • No entanto, foi simples de corrigir a partir de sua interface de hospedagem CPANEl LINUX.
  • Clique em php.
  • em seguida, clique nos módulos php e, na lista de módulos pré-instalados, clique na caixa para mysqli.
  • Em seguida, clique em salvar. (Não há necessidade de alterar o código se funcionou (s) em outro servidor.)

Infelizmente, seus artigos de suporte foram uma perda de tempo. Depois de ler isso, fui para a interface administrativa com uma nova determinação.


0

Algumas distribuições (como o Gentoo ) suportam múltiplas instalações de PHP, e você deve ter certeza de que está usando uma com mysqli instalado e habilitado.

No Gentoo, instalei um novo PHP (com o sinalizador mysqli USE habilitado), mas precisei ativar a nova versão do PHP (já que o antigo deve ter o mysqli ausente):

# eselect php list apache2
  [1]   php5.3 *
  [2]   php5.5
# eselect php set apache2 2
You have to run `/etc/init.d/apache2 restart' for the changes to take effect
# /etc/init.d/apache2 restart

0

Eu verifiquei tudo acima e não funcionou para mim,

Existem alguns passos que encontrei.

Usei o PHP versão 5.5.9-1ubuntu4.17 no Ubuntu 14.04

Primeiro verifique a pasta

#ls /etc/php5/mods-available/
json.ini  mcrypt.ini  mysqli.ini  mysql.ini  mysqlnd.ini  opcache.ini  pdo.ini  pdo_mysql.ini  readline.ini  xcache.ini

Se não contiver mysqli.ini , leia outra resposta para instalá-lo,

Abra php.inilocalizar extension_dir

No meu caso, devo definir extension_dir = /usr/lib/php5/20121212

E reinicie o apache2: /ect/init.d/apache2 restart


0

O zip do PHP inclui a maioria das extensões comumente usadas (* .dll no Windows, como php_mysqli.dll) no diretório \ ext, no entanto, elas não são habilitadas por padrão. Você pode receber este erro fatal ao tentar usar o MySQLi:

( ! ) Fatal error: Uncaught Error: Class 'mysqli' not found in C:\myProject\ class.Database.php on line 24

Para habilitar as extensões, abra php.ini (você pode precisar primeiro copiar php.ini-development como php.ini) e descomente (ou adicione) estas duas linhas:

extension_dir = "ext"

E quaisquer extensões específicas para as quais você está recebendo Erros Fatais, ou seja, para mysqli:

extension=mysqli


0

Em uma nova instalação do PHP, remova ;antes extension_dirno php.ini.



0

Para qualquer pessoa que use o docker, encontrei esse problema e resolvi-o usando meu próprio Dockerfile em vez da imagem php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

Eu encontrei uma solução para este problema após um longo procedimento de análise. Depois de testar adequadamente minha instalação do php com os recursos de linha de comando, descobri que o php está funcionando bem e poderia funcionar com o banco de dados mysql. Btw. você pode executar arquivos de código com código php com o comando php -f filename.php
Então eu percebi que deve haver algo errado com o Apache.
Fiz um arquivo com apenas a função phpinfo () dentro.
Aqui eu vi, que na linha
Arquivo de Configuração Carregado
meu arquivo de configuração não foi carregado, ao invés disso foi mencionado (nenhum).

Finalmente encontrei na configuração do Apache a entrada

<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

Mas eu instalei o PHP 7 e o Apache não conseguiu carregar o arquivo php.ini porque não havia entrada para isso. Eu adicionei

<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

e após reiniciar o Apache tudo funciona bem.

Esses blocos de código acima eu encontrei em meu arquivo httpd-xampp.conf. Pode estar em outro lugar em sua configuração.
No mesmo arquivo eu havia alterado antes as configurações do php 7 em substituição à versão 5 do php.

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadFile "C:/xampp/php/php7ts.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

Como você pode ver, tenho o pacote xampp instalado, mas esse problema estava apenas no lado do Apache.


0

instale a extensão phpXX pelo PHP. No caso do meu FreeBSD:

pkg install php74-extensions

0

Estou usando o xampp e meu problema foi corrigido depois de renomear:

extension_dir = "ext"

para

extension_dir = "C:\xampp\php\ext"

PS: Não se esqueça de reiniciar o apache após fazer esta alteração!


-1
<?php  /* If the error is due to calling mysqli in a class */

    class dbconnect extends mysqli{

        private $host = 'localhost';
        private $user = 'root';
        private $pass = '';
        private $db = 'test';

        public function __construct() {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);

            if (mysqli_connect_error()) {
                die('Connect Error (' . mysqli_connect_errno() . ') ' .
                    mysqli_connect_error());
            }
        }
    }
?>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.