Come risolvere "Errore fatale: classe 'MySQLi' non trovata"?


92

Sto eseguendo un tutorial e ricevo questo errore:

Errore irreversibile: classe "MySQLi" non trovata (URL LUNGO) alla riga 8

Il codice sulla riga 8 è:

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

Ho visto online qualcuno che diceva di vedere se era attivato nel mio phpinfo (), ma non c'era niente elencato lì sotto per "mysqli".

Inoltre, sto eseguendo la versione PHP 5.2.5


Puoi usare una classe MYSQLi scritta a mano , quindi non è necessario installare mysqli. È l'unica soluzione se non possiedi il server.
polli

Risposte:


83

Sembra che tu abbia solo bisogno di installare MySQLi .

Se pensi di averlo fatto e hai ancora un problema, pubblica il tuo sistema operativo e qualsiasi altra cosa che possa aiutare a diagnosticare ulteriormente.



Per me è stato risolto con: apt-get install php7.0-mysql.
Corro

Su AWS con amazon linux, sarebbe qualcosa del tipo sudo yum install php56-mysqlnd.x86_64(scegli quello corrispondente alla versione di php che hai installato)
buon auspicio99

46

Puoi verificare se le librerie mysqli sono presenti eseguendo questo codice:

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

6
Continuo a ricevere "Non abbiamo mysqli !!!" anche dopo aver eseguito `sudo apt-get install php5-mysqlnd`?
Banned_User

Ottengo il 'Phew ce l'abbiamo ma continuo a ricevere lo stesso errore che Class' msqli 'non ha trovato in ... qualche idea?
PA-GW

36

Se sei su Ubuntu , esegui:

 sudo apt-get install php5-mysqlnd

5
E non dimenticare di riavviare Apache dopo questo!
fracz

@fracz Il riavvio di Apache è la parte che ho dimenticato. Ho solo riavviato MySQL. Grazie.
James

Questo non è abbastanza. Mi mancava ancora il pacchetto php5-mysql. Usa sudo apt-get -y install php5-mysql php5-mysqlndper ottenere entrambi. È quello che ti sei perso, @Hermann Ingjaldsson?
Balmipour

è stato un errore di configurazione. stackoverflow.com/questions/31535173/...
Fzs2

21

Se stai chiamando "nuovo mysqli (..)" da una classe con spazio dei nomi, potresti vedere un errore simile Fatal error: Class 'foo\bar\mysqli' not found in. Il modo per risolvere questo problema è impostarlo in modo esplicito sullo spazio dei nomi root con una barra rovesciata precedente in questo modo:

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

1
Questa dovrebbe essere la prima cosa da guardare.
James Bailey

15

Oltre a rimuovere il commento dall'estensione php_mysqli.dll in php.ini , decommenta anche la direttiva extension_dir in php.ini e specifica la tua posizione:

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

Questo ha funzionato per me.


Ha funzionato per me, ma con il ./extquale è il percorso relativo. E ho dovuto rinominare php.ini-developmentper php.inie decommentare in quel file extension=php_mysqli.dll. Oh ragazzo, non mi sei mancato PHP.
Overdrivr

Il trucco qui per me (su Windows) è stato digitare il percorso assoluto per le estensioni dir in "extension_dir".
TechNyquist


2

Come abilitare mysqli in php.ini

  1. Modifica / decommenta rimuovendo ';' (due punti) la seguente configurazione in php.ini: 1st (decommenta e aggiungi config): include_path = "C: \ php \ includes" 2nd (decomment): extension_dir = "ext" 3rd (decomment e modifica configurazione): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Riavvia il server IIS
  3. Assicurati che mysql sia in esecuzione sul sistema.

Come caricare il file php.ini

  1. Rinomina uno qualsiasi dei file php.ini-production / php.ini-development in php.ini da C: \ PHP (nota ora l'estensione sarà ini cioè "php.ini").
  2. Dopo aver rinominato in php.ini, riavviare il server
  3. Vedi le modifiche in http: //localhost/phpinfo.php

2

Se sei su Docker ...

All'interno di php-container RUN:

#docker-php-ext-install mysqli

#apachectl restart

1
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post. - Dalla recensione
Erwan

@Erwan, in realtà, lo fa
Il tuo buon senso


1

Ho pensato di poter aiutare chiunque con lo stesso problema utilizzando i server Namesco. Ho provato a risolvere questo problema dopo aver spostato un database dal mio server locale sul PC di casa a namesco. Non avrebbero assistito hanno detto che era un problema di codifica.

  • Tuttavia, è stato semplice risolvere il problema dalla loro interfaccia di hosting LINUX CPANEl.
  • Fare clic su php.
  • quindi fai clic sui moduli php e dal loro elenco di moduli preinstallati fai clic sulla casella per mysqli.
  • Quindi fare clic su Salva. (Non è necessario modificare il codice se ha funzionato su un altro server.)

Sfortunatamente, i loro articoli di supporto erano una perdita di tempo. Dopo aver letto questo, sono andato all'interfaccia di amministrazione con una nuova determinazione.


0

Alcune distribuzioni (come Gentoo ) supportano più installazioni di PHP e devi assicurarti di usarne una con mysqli installato e abilitato.

Su Gentoo avevo installato un nuovo PHP (con il flag USE mysqli abilitato), ma avevo bisogno di attivare la nuova versione di PHP (dato che alla vecchia doveva mancare mysqli):

# 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

Ho controllato tutto sopra e non ha funzionato per me,

Ci sono alcuni passaggi che ho trovato.

Ho usato la versione PHP 5.5.9-1ubuntu4.17 su Ubuntu 14.04

Prima controlla la cartella

#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 non conteneva mysqli.ini , leggi altre risposte per installarlo,

Apri php.inifind extension_dir

Nel mio caso, devo impostare extension_dir = /usr/lib/php5/20121212

E riavvia apache2: /ect/init.d/apache2 restart


0

Lo zip PHP include la maggior parte delle estensioni di uso comune (* .dll su Windows come php_mysqli.dll) nella directory \ ext, tuttavia non sono abilitate per impostazione predefinita. Potresti ricevere questo errore irreversibile quando provi a utilizzare MySQLi:

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

Per abilitare le estensioni, apri php.ini (potresti dover prima copiare php.ini-development come php.ini) e rimuovi il commento (o aggiungi) queste due righe:

extension_dir = "ext"

E tutte le estensioni particolari per cui ricevi errori irreversibili, ad esempio per mysqli:

extension=mysqli


0

Su una nuova installazione di PHP, rimuovi ;prima extension_dirin php.ini.



0

Per chiunque utilizzi Docker, mi sono imbattuto in questo problema e l'ho risolto utilizzando il mio Dockerfile invece dell'immagine php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

Ho trovato una soluzione a questo problema dopo una lunga procedura di analisi. Dopo aver testato correttamente la mia installazione di php con le funzionalità della riga di comando, ho scoperto che il php funziona bene e potrebbe funzionare con il database mysql. Btw. puoi eseguire file di codice con codice php con il comando php -f nomefile.php
Quindi mi sono reso conto che deve esserci qualcosa di sbagliato in Apache.
Ho creato un file con solo la funzione phpinfo () all'interno.
Qui ho visto che nella riga
Loaded Configuration File il
mio file di configurazione non è stato caricato, invece è stato menzionato (nessuno).

Finalmente ho trovato all'interno della configurazione di Apache la voce

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

Ma ho installato PHP 7 e quindi Apache non è riuscito a caricare il file php.ini perché non c'era voce per quello. Ho aggiunto

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

e dopo il riavvio di Apache tutto funziona bene.

Questi blocchi di codice sopra li ho trovati nel mio file httpd-xampp.conf. Possa essere da qualche altra parte nella tua configurazione.
Nello stesso file avevo modificato prima le impostazioni per il php 7 in sostituzione della versione php 5.

#
# 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"

Come puoi vedere ho installato il pacchetto xampp ma questo problema era solo sul lato Apache.


0

installa phpXX-extension da PHP. Nel caso di FreeBSD:

pkg install php74-extensions

0

Sto usando xampp e il mio problema è stato risolto una volta rinominato:

extension_dir = "ext"

per

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

PS: non dimenticare di riavviare Apache dopo aver apportato questa modifica!


-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());
            }
        }
    }
?>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.