Bagaimana mengatasi "Kesalahan fatal: Kelas 'MySQLi' tidak ditemukan"?

95

Saya melakukan tutorial dan mendapatkan kesalahan ini:

Kesalahan fatal: Kelas 'MySQLi' tidak ditemukan (URL PANJANG) di baris 8

Kode pada baris 8 adalah:

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

Saya melihat online seseorang berkata untuk melihat apakah itu dihidupkan di phpinfo () saya, tetapi tidak ada yang terdaftar di sana di bawah untuk "mysqli".

Juga, saya menjalankan PHP versi 5.2.5

Tylor
sumber
Anda dapat menggunakan kelas MYSQLi tulisan tangan , jadi Anda tidak perlu menginstal mysqli. Ini satu-satunya solusi jika Anda tidak memiliki server.
ayam

Jawaban:

86

Sepertinya Anda hanya perlu menginstal MySQLi .

Jika Anda merasa telah melakukannya dan masih mengalami masalah, harap posting sistem operasi Anda dan hal lain yang mungkin membantu mendiagnosisnya lebih lanjut.

Greg
sumber
21
Di AWS, Anda baru saja menjalankansudo yum install php-mysqli
bobobobo
Bagi saya itu sudah diperbaiki dengan: apt-get install php7.0-mysql. Saya menjalankan Raspbian Stretch 9
negrotico19
Di AWS dengan amazon linux, itu akan menjadi seperti sudo yum install php56-mysqlnd.x86_64(pilih yang cocok dengan versi php mana yang telah Anda instal)
keberuntungan99
47

Anda dapat memeriksa apakah perpustakaan mysqli ada dengan menjalankan kode ini:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79.dll
sumber
6
Saya masih mendapatkan "Kami tidak memiliki mysqli !!!" bahkan setelah menjalankan `sudo apt-get install php5-mysqlnd`?
Banned_User
Saya mendapatkan pesan 'Fiuh kami memilikinya tetapi saya terus mendapatkan kesalahan yang sama bahwa Kelas' msqli 'tidak ditemukan di ... ada ide?
PA-GW
38

Jika Anda menggunakan Ubuntu , jalankan:

 sudo apt-get install php-mysqlnd
anshuman
sumber
5
Dan jangan lupa restart Apache setelah ini!
fracz
@fracz Memulai ulang Apache adalah bagian yang saya lupa. Saya hanya me-restart MySQL. Terima kasih.
Yakobus
Ini tidak cukup. Saya masih kekurangan paket php5-mysql. Gunakan sudo apt-get -y install php5-mysql php5-mysqlnduntuk mendapatkan keduanya. Apakah itu yang Anda lewatkan, @Hermann Ingjaldsson?
Balmipour
itu adalah beberapa kesalahan konfigurasi. stackoverflow.com/questions/31535173/…
Fzs2
22

Jika Anda memanggil "mysqli baru (..)" dari dalam kelas yang memiliki namespace, Anda mungkin melihat kesalahan serupa Fatal error: Class 'foo\bar\mysqli' not found in. Cara untuk memperbaikinya adalah dengan mengaturnya secara eksplisit ke namespace root dengan garis miring terbalik sebelumnya seperti:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
alexkb.dll
sumber
1
Ini harus menjadi hal pertama yang harus dilihat.
James Bailey
15

Selain menghapus komentar pada ekstensi php_mysqli.dll di php.ini , juga hapus komentar direktif extension_dir di php.ini dan tentukan lokasi Anda:

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

Ini membuatnya berhasil untuk saya.

catawampus.dll
sumber
Itu berhasil untuk saya tetapi dengan ./extyang merupakan jalan relatif. Dan saya harus mengganti nama php.ini-developmentmenjadi php.inidan menghapus komentar di file itu extension=php_mysqli.dll. Oh nak, aku tidak merindukanmu PHP.
Overdrivr
Trik di sini bagi saya (di Windows) adalah dengan mengetikkan path absolut ke dir ekstensi di "extension_dir".
TechNyquist
5

OS saya adalah Ubuntu . Saya memecahkan masalah ini dengan menggunakan:

sudo apt-get install php5-mysql
pengguna3839088
sumber
Pada mint 19: sudo apt-get install php-mysql
Ailton F. Silva
2

Jika Anda menggunakan Docker ...

Di dalam RUN php-container:

#docker-php-ext-install mysqli

#apachectl restart
reyqueson
sumber
2

Cara Mengaktifkan mysqli di php.ini

  1. Edit / batalkan komentar dengan menghapus ';' (titik dua) konfigurasi berikut di php.ini: 1st (hapus komentar dan tambahkan config):
    include_path = "C:\php\includes"
    
    Kedua (tidak berkomentar):
    extension_dir = "ext"
    
    Ketiga (hapus komentar dan edit konfigurasi):
    extension=C:/PHP/ext/php_mysql.dll
    extension=C:/PHP/ext/php_mysqli.dll
    
  2. Mulai ulang server IIS
  3. Pastikan mysql berjalan di sistem.

Bagaimana memuat file php.ini

  1. Ubah nama salah satu file php.ini-production / php.ini-development menjadi php.ini dari C: \ PHP (perhatikan sekarang ekstensinya adalah ini yaitu "php.ini").
  2. Setelah mengganti nama menjadi file php.ini restart server
  3. Lihat perubahan di http: //localhost/phpinfo.php
Gani
sumber
1

Saya pikir saya dapat membantu siapa saja dengan masalah yang sama menggunakan server Namesco. Saya telah mencoba untuk memperbaiki masalah ini setelah memindahkan database dari server lokal saya di pc rumah ke namesco. Mereka tidak akan membantu mereka mengatakan itu adalah masalah pengkodean.

  • Namun, itu mudah untuk diperbaiki dari antarmuka hosting CPANEl LINUX mereka.
  • Klik di php.
  • kemudian klik pada modul php dan dari daftar modul yang telah diinstal sebelumnya cukup klik kotak untuk mysqli.
  • Lalu klik simpan. (Tidak perlu mengubah kode jika berfungsi di server lain.)

Sayangnya, artikel dukungan mereka hanya membuang-buang waktu. Setelah membaca ini saya pergi ke antarmuka admin dengan tekad baru.

John
sumber
0

Beberapa distribusi (seperti Gentoo ) mendukung banyak instalasi PHP, dan Anda harus memastikan Anda menggunakan salah satunya dengan mysqli terinstal dan aktif.

Di Gentoo, saya telah menginstal PHP baru (dengan flag USE mysqli diaktifkan), tetapi saya perlu mengaktifkan versi baru PHP (karena yang lama pasti tidak memiliki 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
sumber
0

Saya memeriksa semua di atas dan itu tidak berhasil untuk saya,

Ada beberapa langkah yang saya temukan.

Saya menggunakan PHP Versi 5.5.9-1ubuntu4.17 di Ubuntu 14.04

Cek dulu foldernya

#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

Jika tidak mengandung mysqli.ini , baca jawaban lain untuk menginstalnya,

Buka php.inifind extension_dir

Dalam kasus saya, saya harus mengatur extension_dir = /usr/lib/php5/20121212

Dan mulai ulang apache2: /ect/init.d/apache2 restart

vanduc1102
sumber
0

Zip PHP menyertakan sebagian besar ekstensi yang umum digunakan (* .dll di windows seperti php_mysqli.dll) di bawah direktori \ ext, namun tidak diaktifkan secara default. Anda mungkin mendapatkan Kesalahan Fatal ini ketika mencoba menggunakan MySQLi:

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

Untuk mengaktifkan ekstensi, buka php.ini (Anda mungkin perlu menyalin php.ini-development sebagai php.ini), dan hapus komentar (atau tambahkan) dua baris ini:

extension_dir = "ext"

Dan ekstensi tertentu yang Anda dapatkan Kesalahan Fatalnya, yaitu untuk mysqli:

extension=mysqli
Griknok
sumber
0

di ubuntu:

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

Pada instalasi baru PHP, hapus ;sebelumnya extension_dirdi php.ini.

Andrei
sumber
0

di Debian 10

apt install php-mysql

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

Bagi siapa pun yang menggunakan buruh pelabuhan, saya mengalami masalah ini, dan menyelesaikannya dengan menggunakan Dockerfile saya sendiri, bukan gambar php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli
bozdoz.dll
sumber
0

Saya menemukan solusi untuk masalah ini setelah prosedur analisis yang lama. Setelah menguji instalasi php saya dengan benar dengan fitur baris perintah, saya menemukan bahwa php berfungsi dengan baik dan dapat bekerja dengan database mysql. Btw. Anda dapat menjalankan file-kode dengan kode php dengan perintah php -f filename.php
Jadi saya menyadari, pasti ada yang salah dengan Apache.
Saya membuat file hanya dengan fungsi phpinfo () di dalamnya.
Disini saya melihat, bahwa pada baris
Loaded Configuration File
file config saya tidak dimuat, malah ada yang disebutkan (tidak ada).

Akhirnya saya menemukan entri dalam konfigurasi Apache

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

Tetapi saya telah menginstal PHP 7 sehingga Apache tidak dapat memuat file php.ini karena tidak ada entri untuk itu. saya tambahkan

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

dan setelah restart Apache semuanya bekerja dengan baik.

Blok kode di atas saya temukan di file httpd-xampp.conf saya. Mungkin itu ada di tempat lain di konfigurasi Anda.
Di file yang sama saya telah mengubah sebelumnya pengaturan untuk php 7 sebagai pengganti versi 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"

Seperti yang Anda lihat, saya telah menginstal paket xampp tetapi masalah ini hanya ada di sisi Apache.

Klaus-Peter Ow Lex
sumber
0

instal ekstensi-phpXX oleh PHP. Dalam kasus FreeBSD saya:

pkg install php74-extensions
Biddut Mitra
sumber
0

Saya menggunakan xampp dan masalah saya diperbaiki setelah saya mengganti nama:

extension_dir = "ext"

untuk

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

PS: Jangan lupa restart apache setelah melakukan perubahan ini!

Andrei
sumber
0

Di php.ini:

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

Pastikan versi PHP sudah benar.

Papa Mike
sumber
0
  1. Buka folder PHP Anda.
  2. Temukan php.ini-development dan buka.
  3. Temukan ;extension=mysqli
  4. hapus ;simbolnya
  5. simpan file dan ubah ekstensi file dari php.ini-development ke php.ini
  6. Mulai ulang server dan uji kode:
    if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {  
            echo 'We don\'t have mysqli!!!';  
     } else {  
         echo 'mysqli is installed';
     }
  1. jika tidak berfungsi, ubah kedua extension_dir di php.ini dari "ext" menjadi "c: \ php \ ext" dan extension = mysqli ke extension = php_mysqli.dll lalu uji lagi Ingatlah untuk mengatur ulang server setiap kali Anda menguji
Takashi Anji
sumber
-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
sumber