"Önemli hata: 'MySQLi' Sınıfı bulunamadı" nasıl çözülür?


95

Bir eğitim yapıyorum ve şu hatayı alıyorum:

Önemli hata: 8. satırda 'MySQLi' sınıfı bulunamadı (LONG URL)

8. satırdaki kod:

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

Çevrimiçi birinin phpinfo () uygulamamda açılıp açılmadığını görmek istediğini gördüm, ancak burada "mysqli" için listelenen hiçbir şey yoktu.

Ayrıca PHP 5.2.5 sürümünü çalıştırıyorum


El yazısıyla yazılmış bir MYSQLi sınıfı kullanabilirsiniz , böylece mysqli'yi yüklemenize gerek kalmaz. Sunucunun sahibi değilseniz tek çözüm budur.
tavuklar


Yanıtlar:


86

Görünüşe göre MySQLi'yi yüklemeniz gerekiyor .

Bunu yaptığınızı düşünüyorsanız ve hala bir sorununuz varsa, lütfen işletim sisteminizi ve daha fazla teşhis edilmesine yardımcı olabilecek diğer her şeyi gönderin.



Benim için şu şekilde düzeltildi: apt-get install php7.0-mysql. Raspbian Stretch 9'da
koşuyorum

Amazon linux ile AWS'de, sudo yum install php56-mysqlnd.x86_64(yüklediğiniz php sürümüne uygun olanı seçin)
hayırlı99

47

Bu kodu çalıştırarak mysqli kitaplıklarının mevcut olup olmadığını kontrol edebilirsiniz:

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

6
Hâlâ "Mysqli'miz yok !!!" `sudo apt-get install php5-mysqlnd` çalıştırıldıktan sonra bile?
Banned_User

'Phew elimizde var ama' msqli 'Sınıfının bulunmadığı aynı hatayı alıyorum ... herhangi bir fikir?
PA-GW

38

Eğer biri Ubuntu , çalıştırın:

 sudo apt-get install php-mysqlnd

5
Ve bundan sonra Apache'yi yeniden başlatmayı unutmayın!
fracz

@fracz Apache'yi yeniden başlatmak unuttuğum kısım. Yalnızca MySQL'i yeniden başlattım. Teşekkürler.
James

Bu yeterli değil. Hala php5-mysql paketi eksikti. İkisini sudo apt-get -y install php5-mysql php5-mysqlndde almak için kullanın . Eksik olan bu muydu @Hermann Ingjaldsson?
Balmipour

bazı yapılandırma hatasıydı. stackoverflow.com/questions/31535173/…
Fzs2

22

İsim alanlı bir sınıftan "yeni mysqli (..)" çağırıyorsanız, benzer bir hata görebilirsiniz Fatal error: Class 'foo\bar\mysqli' not found in. Bunu düzeltmenin yolu, aşağıdaki gibi bir ters eğik çizgi ile açıkça kök ad alanına ayarlamaktır:

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

1
Bakılması gereken ilk şey bu olmalı.
James Bailey

15

Uncommenting ek olarak php_mysqli.dll uzantıyı php.ini de yorumsuz extension_dir içinde yönergesini php.ini ve konumunuzu belirtin:

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

Bu benim için çalışmasını sağladı.


Benim için çalıştı ama ./extgöreceli yol hangisi. Ve yeniden adlandırmak zorunda php.ini-developmentiçin php.inibu dosyadaki yorumsuz ve extension=php_mysqli.dll. Oh oğlum, seni PHP özlemedim.
Overdrivr

Benim için buradaki hile (Windows'ta) "extension_dir" dizinine uzantılara mutlak yolu yazmaktı.
TechNyquist


2

Docker kullanıyorsanız ...

Php-container RUN içinde:

#docker-php-ext-install mysqli

#apachectl restart


2

Php.ini'de mysqli nasıl etkinleştirilir

  1. Php.ini'de aşağıdaki yapılandırmayı ';' (iki nokta üst üste) kaldırarak düzenleyin / açıklamayı kaldırın: 1. (açıklamayı kaldır ve yapılandırma ekle):
    include_path = "C:\php\includes"
    
    2. (yorumsuz):
    extension_dir = "ext"
    
    3. (açıklamayı kaldır ve yapılandırmayı düzenle):
    extension=C:/PHP/ext/php_mysql.dll
    extension=C:/PHP/ext/php_mysqli.dll
    
  2. IIS sunucusunu yeniden başlatın
  3. Mysql'nin sistemde çalıştığından emin olun.

Php.ini dosyası nasıl yüklenir

  1. Php.ini-production / php.ini-development dosyasından herhangi birini C: \ PHP'den php.ini olarak yeniden adlandırın (şimdi uzantının ini, yani "php.ini" olacağını unutmayın).
  2. Php.ini dosyası olarak yeniden adlandırdıktan sonra sunucuyu yeniden başlatın
  3. Http: //localhost/phpinfo.php adresindeki değişiklikleri görün

1

Namesco sunucularını kullanarak aynı sorunu yaşayan herkese yardımcı olabileceğimi düşündüm. Bir veritabanını ev bilgisayarındaki yerel sunucumdan namesco'ya taşıdıktan sonra bu sorunu çözmeye çalışıyorum. Yardımcı olmadılar, bunun bir kodlama sorunu olduğunu söylediler.

  • Ancak, CPANEl LINUX barındırma arayüzünden düzeltmek basitti.
  • Php'ye tıklayın.
  • daha sonra php modüllerine tıklayın ve önceden yüklenmiş modüller listesinden mysqli kutusunu tıklayın.
  • Ardından kaydet'i tıklayın. (Başka bir sunucuda çalıştıysa kodu değiştirmeye gerek yoktur.)

Ne yazık ki, destek makaleleri zaman kaybıydı. Bunu okuduktan sonra yeni bir tespitle yönetici arayüzüne gittim.


0

Bazı dağıtımlar ( Gentoo gibi ) birden fazla PHP kurulumunu destekler ve mysqli'nin kurulu ve etkinleştirilmiş bir sürümünü kullandığınızdan emin olmalısınız.

Gentoo'da yeni bir PHP kurmuştum (mysqli USE bayrağı etkinken), ancak PHP'nin yeni sürümünü etkinleştirmem gerekiyordu (eskisi mysqli eksik olduğundan):

# 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

Yukarıdakilerin hepsini kontrol ettim ve benim için işe yaramadı

Bulduğum bazı adımlar var.

Ben kullanılan PHP Sürüm 5.5.9-1ubuntu4.17 üzerinde Ubuntu 14.04

Önce klasörü kontrol edin

#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

Mysqli.ini içermiyorsa , yüklemek için diğer cevabı okuyun,

Açık php.inibulmak extension_dir

Benim durumumda, ayarlamalıyım extension_dir = /usr/lib/php5/20121212

Ve apache2'yi yeniden başlatın: /ect/init.d/apache2 restart


0

PHP zip dosyası, \ ext dizini altında yaygın olarak kullanılan uzantıların çoğunu (php_mysqli.dll gibi pencerelerde * .dll) içerir, ancak bunlar varsayılan olarak etkin değildir. MySQLi'yi kullanmaya çalışırken bu Ölümcül Hatayı alıyor olabilirsiniz:

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

Uzantıları etkinleştirmek için php.ini'yi açın (önce php.ini-development'ı php.ini olarak kopyalamanız gerekebilir) ve şu iki satırı açıklamayı kaldırın (veya ekleyin):

extension_dir = "ext"

Ve Ölümcül Hatalar aldığınız belirli uzantılar, yani mysqli için:

extension=mysqli


0

Yeni bir PHP yüklemesinde, ;önce extension_dirphp.ini içinde kaldırın .



0

Docker kullanan herkes için bu sorunla karşılaştım ve php: fpm görüntüsü yerine kendi Dockerfile'ımı kullanarak çözdüm:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

Uzun bir analiz sürecinden sonra bu soruna bir çözüm buldum. Php kurulumumu komut satırı özellikleriyle düzgün bir şekilde test ettikten sonra php'nin iyi çalıştığını ve mysql veritabanıyla çalışabileceğini öğrendim. Btw. php -f filename.php komutuyla php kodu ile kod dosyalarını çalıştırabilirsiniz.
Bu yüzden Apache'de bir sorun olması gerektiğini anladım.
İçinde sadece phpinfo () işlevi olan bir dosya yaptım.
Burada,
Yüklü Yapılandırma Dosyası satırında yapılandırma
dosyamın yüklenmediğini, bunun yerine bahsedildiğini (yok) gördüm .

Sonunda Apache yapılandırmasında girdiyi buldum

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

Ama PHP 7'yi kurdum ve bu yüzden Apache php.ini dosyasını yükleyemedi çünkü bunun için bir girdi yoktu. ekledim

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

ve Apache'yi yeniden başlattıktan sonra her şey iyi çalışıyor.

Yukarıdaki kod bloklarını httpd-xampp.conf dosyamda buldum. Yapılandırmanızda başka bir yerde olsun.
Aynı dosyada php 7'nin ayarlarından önce php 5 sürümünün yerini alacak şekilde değiştirmiştim.

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

Gördüğünüz gibi xampp paketini kurdum ama bu sorun sadece Apache tarafındaydı.


0

phpXX uzantısını PHP ile kurun. FreeBSD'mde:

pkg install php74-extensions

0

Xampp kullanıyorum ve yeniden adlandırdığımda sorunum çözüldü:

extension_dir = "ext"

-e

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

Not: Bu değişikliği yaptıktan sonra apache'yi yeniden başlatmayı unutmayın!


0

Php.ini içinde:

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

PHP sürümünün doğru olduğundan emin olun.


0
  1. PHP klasörünüzü açın.
  2. Php.ini-development'ı bulun ve açın.
  3. Bul ;extension=mysqli
  4. ;sembolü sil
  5. dosyayı kaydedin ve dosya uzantısını php.ini-development'tan php.ini'ye değiştirin
  6. Sunucuyu yeniden başlatın ve kodu test edin:
    if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {  
            echo 'We don\'t have mysqli!!!';  
     } else {  
         echo 'mysqli is installed';
     }
  1. eğer çalışmıyorsa, php.ini'deki extension_dir'i "ext" den "c: \ php \ ext" olarak değiştirin ve extension = mysqli'yi extension = php_mysqli.dll olarak değiştirin ve ardından tekrar test edin Her test yaptığınızda sunucuyu sıfırlamayı unutmayın

-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());
            }
        }
    }
?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.