Jak rozwiązać problem „Błąd krytyczny: Nie znaleziono klasy 'MySQLi'”?

96

Robię samouczek i otrzymuję ten błąd:

Błąd krytyczny: nie znaleziono klasy „MySQLi” (DŁUGI URL) w wierszu 8

Kod w linii 8 to:

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

Widziałem w Internecie, że ktoś powiedział, że powinien sprawdzić, czy jest włączony w moim phpinfo (), ale nie było tam nic wymienionego dla "mysqli".

Ponadto używam PHP w wersji 5.2.5

Tylor
źródło
Możesz użyć odręcznej klasy MYSQLi , więc nie musisz instalować mysqli. To jedyne rozwiązanie, jeśli nie jesteś właścicielem serwera.
kurczaki

Odpowiedzi:

86

Wygląda na to, że wystarczy zainstalować MySQLi .

Jeśli uważasz, że zrobiłeś to i nadal masz problem, prześlij swój system operacyjny i wszystko, co może pomóc w dalszej diagnozie.

Greg
źródło
21
Na AWS po prostu sudo yum install php-mysqli
biegasz
U mnie zostało to naprawione przez: apt-get install php7.0-mysql. Biegam na Raspbian Stretch 9
negrotico 19
Na AWS z amazon linux byłoby to coś w stylu sudo yum install php56-mysqlnd.x86_64(wybierz tę, która pasuje do zainstalowanej wersji php)
auspicious99
47

Możesz sprawdzić, czy biblioteki mysqli są obecne, wykonując następujący kod:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79
źródło
6
Wciąż otrzymuję komunikat „Nie mamy mysqli !!!” nawet po uruchomieniu `sudo apt-get install php5-mysqlnd`?
Banned_User
Otrzymuję komunikat „Uff, mamy to, ale ciągle otrzymuję ten sam błąd, którego nie znaleziono w klasie„ msqli ”w… żadnych pomysłach?
PA-GW
38

Jeśli korzystasz z Ubuntu , uruchom:

 sudo apt-get install php-mysqlnd
anshuman
źródło
5
I nie zapomnij o ponownym uruchomieniu Apache po tym!
fracz
@fracz Zrestartowanie Apache to część, o której zapomniałem. Zrestartowałem tylko MySQL. Dzięki.
James
To nie wystarczy. Wciąż brakowało mi pakietu php5-mysql. Użyj, sudo apt-get -y install php5-mysql php5-mysqlndaby uzyskać oba. Czy to jest to, czego ci brakowało, @Hermann Ingjaldsson?
Balmipour,
to był jakiś błąd konfiguracji. stackoverflow.com/questions/31535173/…
Fzs2
22

Jeśli wywołujesz „nowe mysqli (..)” z klasy o przestrzeni nazw, możesz zobaczyć podobny błąd Fatal error: Class 'foo\bar\mysqli' not found in. Sposobem na naprawienie tego jest jawne ustawienie go na główną przestrzeń nazw z poprzedzającym odwrotnym ukośnikiem, jak poniżej:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
alexkb
źródło
1
To powinna być pierwsza rzecz, na którą należy spojrzeć.
James Bailey
15

Oprócz odkomentowania rozszerzenia php_mysqli.dll w php.ini , odkomentuj również dyrektywę extension_dir w php.ini i określ swoją lokalizację:

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

To sprawiło, że dla mnie zadziałało.

catawampus
źródło
To zadziałało dla mnie, ale z ./extjaką ścieżką względną. I musiałem zmienić nazwę php.ini-developmentna php.inii odkomentować w tym pliku extension=php_mysqli.dll. O rany, nie tęskniłem za tobą PHP.
Overdrivr
Sztuczka w moim przypadku polegała na wpisaniu bezwzględnej ścieżki do katalogu rozszerzeń w "katalog_rozszerzeń".
TechNyquist
5

Mój system operacyjny to Ubuntu . Rozwiązałem ten problem używając:

sudo apt-get install php5-mysql
user3839088
źródło
Mint 19: sudo apt-get install php-mysql
Ailton F. Silva
2

Jeśli korzystasz z Dockera ...

Wewnątrz kontenera php RUN:

#docker-php-ext-install mysqli

#apachectl restart
reyqueson
źródło
2

Jak włączyć mysqli w php.ini

  1. Edytuj / odkomentuj, usuwając ';' (dwukropek) następującą konfigurację w php.ini: 1st (odkomentuj i dodaj konfigurację):
    include_path = "C:\php\includes"
    
    2nd (odkomentować):
    extension_dir = "ext"
    
    3 (odkomentuj i edytuj konfigurację):
    extension=C:/PHP/ext/php_mysql.dll
    extension=C:/PHP/ext/php_mysqli.dll
    
  2. Uruchom ponownie serwer IIS
  3. Upewnij się, że mysql jest uruchomiony w systemie.

Jak załadować plik php.ini

  1. Zmień nazwę dowolnego pliku php.ini-production / php.ini-development na php.ini z C: \ PHP (zwróć uwagę, że teraz rozszerzenie będzie ini, czyli „php.ini”).
  2. Po zmianie nazwy na plik php.ini zrestartuj serwer
  3. Zobacz zmiany w http: //localhost/phpinfo.php
Gani
źródło
1

Pomyślałem, że mógłbym pomóc każdemu z tym samym problemem przy użyciu serwerów Namesco. Próbowałem rozwiązać ten problem po przeniesieniu bazy danych z lokalnego serwera na komputerze domowym do firmy Namesco. Nie pomogli, powiedzieli, że to problem z kodowaniem.

  • Jednak było to łatwe do naprawienia z ich interfejsu hostingowego CPANEl LINUX.
  • Kliknij php.
  • następnie kliknij moduły php iz ich listy preinstalowanych modułów kliknij pole mysqli.
  • Następnie kliknij Zapisz. (Nie trzeba zmieniać kodu, jeśli działał na innym serwerze).

Niestety, ich artykuły pomocnicze były stratą czasu. Po przeczytaniu tego przeszedłem do interfejsu administratora z nową determinacją.

Jan
źródło
0

Niektóre dystrybucje (takie jak Gentoo ) obsługują wiele instalacji PHP i musisz się upewnić, że używasz jednej z zainstalowanym i włączonym mysqli.

Na Gentoo zainstalowałem nowe PHP (z włączoną flagą mysqli USE), ale potrzebowałem aktywować nową wersję PHP (ponieważ w starej musiało brakować 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
Jared Thirsk
źródło
0

Sprawdziłem wszystko powyżej i u mnie to nie działa,

Znalazłem kilka kroków.

Użyłem PHP w wersji 5.5.9-1ubuntu4.17 na Ubuntu 14.04

Najpierw sprawdź folder

#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

Jeśli nie zawiera mysqli.ini , przeczytaj inną odpowiedź dotyczącą instalacji,

Otwórz php.iniznajdź katalog_ rozszerzenia

W moim przypadku muszę ustawić extension_dir = /usr/lib/php5/20121212

I zrestartuj Apache2: /ect/init.d/apache2 restart

vanduc1102
źródło
0

Plik zip PHP zawiera większość powszechnie używanych rozszerzeń (* .dll w systemie Windows, takich jak php_mysqli.dll) w katalogu \ ext, jednak nie są one domyślnie włączone. Możesz otrzymać ten błąd krytyczny podczas próby użycia MySQLi:

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

Aby włączyć rozszerzenia, otwórz php.ini (może być konieczne najpierw skopiowanie php.ini-development jako php.ini) i cofnij komentarz (lub dodaj) te dwie linie:

extension_dir = "ext"

Oraz inne rozszerzenia, dla których otrzymujesz błędy krytyczne, np. Mysqli:

extension=mysqli
Griknok
źródło
0

na ubuntu:

sudo apt-get install php-mysql
sudo service apache2 restart
vishalknishad
źródło
0

Przy nowej instalacji PHP usuń ;wcześniej extension_dirw php.ini.

Andrei
źródło
0

w Debianie 10

apt install php-mysql

/etc/init.d/apache2 restart
Salvador Rueda
źródło
0

Dla każdego, kto używa dockera, napotkałem ten problem i rozwiązałem go, używając własnego pliku Dockerfile zamiast obrazu php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli
bozdoz
źródło
0

Znalazłem rozwiązanie tego problemu po długiej analizie. Po prawidłowym przetestowaniu mojej instalacji php z funkcjami wiersza poleceń stwierdziłem, że php działa dobrze i może współpracować z bazą danych mysql. Przy okazji. możesz uruchamiać pliki z kodem z kodem php za pomocą polecenia php -f nazwa_pliku.php
Zdałem sobie sprawę, że coś musi być nie tak z Apache.
Zrobiłem plik zawierający tylko funkcję phpinfo ().
Tutaj zobaczyłem, że w linii
Loaded Configuration File
mój plik konfiguracyjny nie został załadowany, zamiast tego został wymieniony (brak).

Wreszcie znalazłem wpis w konfiguracji Apache

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

Ale zainstalowałem PHP 7, więc Apache nie mógł załadować pliku php.ini, ponieważ nie było dla niego wpisu. dodałem

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

a po ponownym uruchomieniu Apache wszystko działa dobrze.

Te bloki kodu powyżej znalazłem w moim pliku httpd-xampp.conf. Niech to jest gdzie indziej w twojej konfiguracji.
W tym samym pliku zmieniłem wcześniej ustawienia dla php 7 jako zamiennik dla wersji 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"

Jak widać, mam zainstalowany pakiet xampp, ale ten problem był tylko po stronie Apache.

Klaus-Peter Ow Lex
źródło
0

zainstaluj rozszerzenie phpXX przez PHP. W moim przypadku FreeBSD:

pkg install php74-extensions
Biddut Mitra
źródło
0

Używam Xampp i mój problem został rozwiązany po zmianie nazwy:

extension_dir = "ext"

do

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

PS: Nie zapomnij zrestartować Apache po wprowadzeniu tej zmiany!

Andrei
źródło
0

W php.ini:

extension_dir ="c:/wamp64/bin/php/php7.4.9/ext/"

Upewnij się, że wersja PHP jest poprawna.

Papa Mike
źródło
0
  1. Otwórz folder PHP.
  2. Znajdź php.ini-development i otwórz go.
  3. Odnaleźć ;extension=mysqli
  4. usuń ;symbol
  5. zapisz plik i zmień rozszerzenie pliku z php.ini-development na php.ini
  6. Zrestartuj serwer i przetestuj kod:
    if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {  
            echo 'We don\'t have mysqli!!!';  
     } else {  
         echo 'mysqli is installed';
     }
  1. jeśli to nie działa, zmień oba pliki katalog_rozszerzenia w php.ini z "ext" na "c: \ php \ ext" i z rozszerzenia = mysqli na extension = php_mysqli.dll, a następnie przetestuj ponownie Pamiętaj o resetowaniu serwera za każdym razem, gdy przeprowadzasz test
Takashi Anji
źródło
-2
<?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
źródło