Wie löse ich "Schwerwiegender Fehler: Klasse 'MySQLi' nicht gefunden"?

91

Ich mache ein Tutorial und erhalte folgende Fehlermeldung:

Schwerwiegender Fehler: Klasse 'MySQLi' in Zeile 8 nicht gefunden (LANGE URL)

Der Code in Zeile 8 lautet:

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

Ich habe online gesehen, dass jemand gesagt hat, ob es in meiner phpinfo () aktiviert ist, aber dort ist unter "mysqli" nichts aufgeführt.

Außerdem verwende ich PHP Version 5.2.5

Tylor
quelle
Sie können eine handgeschriebene MYSQLi-Klasse verwenden , sodass Sie mysqli nicht installieren müssen. Dies ist die einzige Lösung, wenn Sie den Server nicht besitzen.
Hühner

Antworten:

82

Klingt so, als müssten Sie nur MySQLi installieren .

Wenn Sie der Meinung sind, dass Sie dies getan haben und immer noch ein Problem haben, veröffentlichen Sie bitte Ihr Betriebssystem und alles andere, was zur weiteren Diagnose beitragen könnte.

Greg
quelle
20
Auf AWS laufen Sie geradesudo yum install php-mysqli
Bobobobo
Für mich wurde es behoben mit: apt-get install php7.0-mysql. Ich
laufe
Unter AWS mit Amazon Linux wäre es so etwas wie sudo yum install php56-mysqlnd.x86_64(wählen Sie diejenige aus, die zu der von Ihnen installierten PHP-Version passt)
glückverheißend99
45

Sie können überprüfen, ob die mysqli-Bibliotheken vorhanden sind, indem Sie diesen Code ausführen:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79
quelle
6
Ich bekomme immer noch "Wir haben kein Mysqli !!!" auch nach dem Ausführen von `sudo apt-get install php5-mysqlnd`?
Banned_User
Ich bekomme den 'Puh, wir haben ihn, aber ich bekomme immer den gleichen Fehler, den die Klasse' msqli 'nicht in ... irgendwelchen Ideen gefunden hat?
PA-GW
35

Wenn Sie unter Ubuntu sind , führen Sie Folgendes aus:

 sudo apt-get install php5-mysqlnd
anshuman
quelle
5
Und vergessen Sie nicht, Apache danach neu zu starten!
Fracz
@fracz Apache neu starten ist der Teil, den ich vergessen habe. Ich habe nur MySQL neu gestartet. Vielen Dank.
James
Das ist nicht genug. Mir fehlte immer noch das php5-mysql-Paket. Verwenden Sie sudo apt-get -y install php5-mysql php5-mysqlnd, um beide zu erhalten. Haben Sie es vermisst, @Hermann Ingjaldsson?
Balmipour
Es war ein Konfigurationsfehler. stackoverflow.com/questions/31535173/…
Fzs2
21

Wenn Sie "new mysqli (..)" aus einer Klasse mit Namespace heraus aufrufen, wird möglicherweise ein ähnlicher Fehler angezeigt Fatal error: Class 'foo\bar\mysqli' not found in. Die Möglichkeit, dies zu beheben, besteht darin, es explizit auf den Root-Namespace mit einem vorhergehenden Backslash wie folgt festzulegen:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
alexkb
quelle
1
Dies sollte das erste sein, was Sie sich ansehen sollten.
James Bailey
14

Neben uncommenting die php_mysqli.dll Erweiterung in der php.ini , auch Kommentar- der extension_dir Direktive in php.ini und geben Sie Ihren Standort:

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

Das hat es für mich funktionieren lassen.

Catawampus
quelle
Es hat bei mir funktioniert, aber mit ./extwelchem ​​ist der relative Weg. Und ich hatte umbenennen php.ini-developmentzu php.iniund uncomment in dieser Datei extension=php_mysqli.dll. Oh Mann, ich habe dich nicht vermisst PHP.
Overdrivr
Der Trick hier für mich (unter Windows) bestand darin, den absoluten Pfad zum Erweiterungsverzeichnis in "extension_dir" einzugeben.
TechNyquist
5

Mein Betriebssystem ist Ubuntu . Ich habe dieses Problem gelöst mit:

sudo apt-get install php5-mysql
user3839088
quelle
Auf Minze 19: sudo apt-get install php-mysql
Ailton F. Silva
2

So aktivieren Sie mysqli in der php.ini

  1. Bearbeiten / Kommentieren Sie durch Entfernen von ';' (Doppelpunkt) der folgenden Konfiguration in der php.ini: 1. ( Kommentar entfernen und Konfiguration hinzufügen): include_path = "C: \ php \ include" 2. (Kommentar): extension_dir = "ext" 3. ( Kommentar auskommentieren ) und edit config): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Starten Sie den IIS-Server neu
  3. Stellen Sie sicher, dass MySQL auf dem System ausgeführt wird.

So laden Sie die Datei php.ini

  1. Benennen Sie eine der Dateien php.ini-Production / php.ini-development von C: \ PHP in php.ini um (beachten Sie, dass die Erweiterung jetzt ini ist, dh "php.ini").
  2. Nach dem Umbenennen in die Datei php.ini starten Sie den Server neu
  3. Siehe die Änderungen in http: //localhost/phpinfo.php
Gani
quelle
2

Wenn Sie auf Docker sind ...

Im PHP-Container RUN:

#docker-php-ext-install mysqli

#apachectl restart
Reyqueson
quelle
1
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. - Aus der Rezension
Erwan
@Erwan tut es tatsächlich
Ihr
1

Ich dachte, ich könnte jedem mit dem gleichen Problem bei der Verwendung von Namesco-Servern helfen. Ich habe versucht, dieses Problem zu beheben, nachdem ich eine Datenbank von meinem lokalen Server auf dem Heim-PC auf Namesco verschoben habe. Sie würden nicht helfen, sie sagten, es sei ein Codierungsproblem.

  • Es war jedoch einfach, das Problem über die CPANEl LINUX-Hosting-Oberfläche zu beheben.
  • Klicken Sie auf PHP.
  • Klicken Sie dann auf PHP-Module und klicken Sie in der Liste der vorinstallierten Module auf das Feld für MySQL.
  • Klicken Sie dann auf Speichern. (Code muss nicht geändert werden, wenn er auf einem anderen Server funktioniert hat.)

Leider waren ihre Support-Artikel Zeitverschwendung. Nachdem ich dies gelesen hatte, ging ich mit einer neuen Entschlossenheit zur Admin-Oberfläche.

John
quelle
0

Einige Distributionen (wie Gentoo ) unterstützen mehrere Installationen von PHP, und Sie müssen sicherstellen, dass Sie eine mit installiertem und aktiviertem mysqli verwenden.

Auf Gentoo hatte ich ein neues PHP installiert (mit aktiviertem mysqli USE-Flag), aber ich musste die neue Version von PHP aktivieren (da das alte mysqli fehlen muss):

# 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
Jared Thirsk
quelle
0

Ich habe alles oben überprüft und es hat bei mir nicht funktioniert.

Ich habe einige Schritte gefunden.

Ich habe PHP Version 5.5.9-1ubuntu4.17 unter Ubuntu 14.04 verwendet

Überprüfen Sie zuerst den Ordner

#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

Wenn es mysqli.ini nicht enthielt , lesen Sie die andere Antwort für die Installation.

Öffnen Sie php.inifind extension_dir

In meinem Fall muss ich einstellen extension_dir = /usr/lib/php5/20121212

Und starte apache2 neu: /ect/init.d/apache2 restart

vanduc1102
quelle
0

Die PHP-Zip-Datei enthält die meisten häufig verwendeten Erweiterungen (* .dll unter Windows wie php_mysqli.dll) im Verzeichnis \ ext, ist jedoch standardmäßig nicht aktiviert. Möglicherweise wird dieser schwerwiegende Fehler angezeigt, wenn Sie versuchen, MySQLi zu verwenden:

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

Um Erweiterungen zu aktivieren, öffnen Sie php.ini (möglicherweise müssen Sie zuerst php.ini-development als php.ini kopieren) und entfernen Sie den Kommentar (oder fügen Sie diese beiden Zeilen hinzu):

extension_dir = "ext"

Und für bestimmte Erweiterungen, für die Sie schwerwiegende Fehler erhalten, z. B. für mysqli:

extension=mysqli
Griknok
quelle
0

auf Ubuntu:

sudo apt-get install php-mysql
sudo service apache2 restart
vishalknishad
quelle
0

Entfernen Sie bei einer Neuinstallation von PHP ;zuvor extension_dirin der php.ini.

Andrei
quelle
0

auf Debian 10

apt install php-mysql

/etc/init.d/apache2 restart
Salvador Rueda
quelle
0

Für alle, die Docker verwenden, bin ich auf dieses Problem gestoßen und habe es behoben, indem ich meine eigene Docker-Datei anstelle des Bildes php: fpm verwendet habe:

FROM php:fpm

RUN docker-php-ext-install mysqli
bozdoz
quelle
0

Nach einem langen Analysevorgang habe ich eine Lösung für dieses Problem gefunden. Nachdem ich meine PHP-Installation mit den Kommandozeilenfunktionen richtig getestet hatte, stellte ich fest, dass die PHP gut funktioniert und mit der MySQL-Datenbank funktionieren könnte. Übrigens. Sie können Code-Dateien mit PHP-Code mit dem Befehl php -f filename.php ausführen.
Also wurde mir klar, dass mit dem Apache etwas nicht stimmt.
Ich habe eine Datei mit nur der Funktion phpinfo () erstellt.
Hier habe ich gesehen, dass in der Zeile
Loaded Configuration File
meine Konfigurationsdatei nicht geladen wurde, sondern dort erwähnt wurde (keine).

Schließlich fand ich in der Apache-Konfiguration den Eintrag

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

Aber ich habe PHP 7 installiert und so konnte der Apache die Datei php.ini nicht laden, da es dafür keinen Eintrag gab. Ich fügte hinzu

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

und nach dem Neustart von Apache funktioniert alles gut.

Diese Codeblöcke oben habe ich in meiner Datei httpd-xampp.conf gefunden. Möge es irgendwo anders in Ihrer Konfiguration sein.
In der gleichen Datei hatte ich vor den Einstellungen für das PHP 7 als Ersatz für die PHP 5-Version geändert.

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

Wie Sie sehen können, habe ich das xampp-Paket installiert, aber dieses Problem war nur auf der Apache-Seite.

Klaus-Peter Ow Lex
quelle
0

Installieren Sie die phpXX-Erweiterung von PHP. In meinem FreeBSD-Fall:

pkg install php74-extensions
Biddut Mitra
quelle
-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());
            }
        }
    }
?>
Hari
quelle