Як вирішити “Фатальну помилку: Клас 'MySQLi' не знайдений”?


92

Я роблю підручник і отримую таку помилку:

Фатальна помилка: Клас 'MySQLi' не знайдено (LONG URL) у рядку 8

Код у рядку 8:

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

Я бачив в Інтернеті, як хтось сказав, щоб перевірити, чи ввімкнено це в моєму phpinfo (), але там нічого не було вказано в розділі "mysqli".

Крім того, я використовую PHP версії 5.2.5


Ви можете використовувати рукописний клас MYSQLi , тому вам не потрібно встановлювати mysqli. Це єдине рішення, якщо ви не є власником сервера.
кури

Відповіді:


83

Здається, вам просто потрібно встановити MySQLi .

Якщо ви вважаєте, що зробили це і все ще маєте проблему, опублікуйте свою операційну систему та все інше, що може допомогти її діагностувати далі.


20
На AWS ви просто біжитеsudo yum install php-mysqli
bobobobo

Для мене це було виправлено за допомогою: apt-get install php7.0-mysql. Я біжу на Raspbian Stretch 9
negrotico19,

На AWS з Amazon Linux це було б приблизно так sudo yum install php56-mysqlnd.x86_64(виберіть той, який відповідає тій версії php, яку ви встановили)
сприятливий99

46

Ви можете перевірити, чи є бібліотеки mysqli, виконавши цей код:

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

6
Я все ще отримую "У нас немає mysqli !!!" навіть після запуску `sudo apt-get install php5-mysqlnd`?
Banned_User

Я отримую повідомлення "Phew, у нас воно є, але я продовжую отримувати ту саму помилку, яку клас" msqli "не знайшов у ... будь-які ідеї?
PA-GW

36

Якщо ви використовуєте Ubuntu , запустіть:

 sudo apt-get install php5-mysqlnd

5
І не забудьте після цього перезапустити Apache!
fracz

@fracz Перезапуск Apache - це та частина, яку я забув. Я перезапустив лише MySQL. Дякую.
Джеймс,

Цього недостатньо. Мені все ще бракувало пакета php5-mysql. Використовуйте, sudo apt-get -y install php5-mysql php5-mysqlndщоб отримати обидва. Це те, чого вам не вистачало, @Hermann Ingjaldsson?
Balmipour,

це була якась помилка конфігурації. stackoverflow.com/questions/31535173 / ...
Fzs2

21

Якщо ви викликаєте "new mysqli (..)" з класу з простором імен, ви можете побачити подібну помилку Fatal error: Class 'foo\bar\mysqli' not found in. Шлях виправити це явним чином встановити його в кореневий простір імен з попередньою косою рискою так:

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

1
Це повинно бути першим, на що слід поглянути.
Джеймс Бейлі,

15

На додаток до того, що коментуєте розширення php_mysqli.dll у php.ini , також прокоментуйте директиву extension_dir у php.ini та вкажіть своє місцезнаходження:

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

Це змусило мене працювати.


Це спрацювало для мене, але з ./extяким відносний шлях. І мені довелося перейменуватиphp.ini-development в php.iniі розкоментуйте в цьому файлі extension=php_mysqli.dll. О, хлопче, я не сумував за тобою PHP.
Overdrivr

Хитрість тут для мене (у Windows) полягала у введенні абсолютного шляху до каталогу розширень у "extension_dir".
TechNyquist


2

Як увімкнути mysqli у php.ini

  1. Відредагуйте / розкоментуйте, видаливши ';' (двокрапка) таку конфігурацію у php.ini: 1-а (розкоментуйте та додайте конфігурацію): include_path = "C: \ php \ includes" 2-а (розкоментуйте): extension_dir = "ext" 3-я (розкоментуйте) та відредагуйте конфігурацію): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Перезапустіть сервер IIS
  3. Переконайтеся, що mysql працює в системі.

Як завантажити файл php.ini

  1. Перейменуйте будь-який файл php.ini-production / php.ini-development на php.ini з C: \ PHP (зверніть увагу, тепер розширення буде ini, тобто "php.ini").
  2. Після перейменування на сервер перезапуску файлу php.ini
  3. Дивіться зміни в http: //localhost/phpinfo.php

2

Якщо ви користуєтеся Docker ...

Всередині php-контейнера RUN:

#docker-php-ext-install mysqli

#apachectl restart

1
Це не дає відповіді на запитання. Щоб критикувати або вимагати роз’яснень від автора, залиште коментар під його публікацією. - З огляду
Ерван

@Erwan це, насправді, робить
Ваш здоровий глузд


1

Я думав, що можу допомогти комусь із цією ж проблемою за допомогою серверів Namesco. Я намагався вирішити цю проблему після переміщення бази даних з мого локального сервера на домашньому ПК до namesco. Вони не допомогли, сказали, що це проблема кодування.

  • Однак це було легко виправити за допомогою інтерфейсу хостингу CPANEl LINUX.
  • Клацніть на php.
  • потім клацніть на php-модулі, а з їх списку попередньо встановлених модулів просто клацніть поле для mysqli.
  • Потім натисніть зберегти. (Не потрібно міняти код, якщо він працював на іншому сервері.)

На жаль, статті про їх підтримку були марною тратою часу. Прочитавши це, я перейшов до інтерфейсу адміністратора з новим рішенням.


0

Деякі дистрибутиви (наприклад, Gentoo ) підтримують кілька інсталяцій PHP, і вам потрібно переконатися, що ви використовуєте один із встановленим та ввімкненим mysqli.

На Gentoo я встановив новий PHP (з увімкненим прапором mysqli USE), але мені потрібно було активувати нову версію PHP (оскільки в старій, мабуть, не було 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

Я перевірив усе вище, і це не спрацювало для мене,

Є кілька кроків, які я знайшов.

Я використовував PHP версії 5.5.9-1ubuntu4.17 на Ubuntu 14.04

Спочатку перевірте папку

#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 , прочитайте іншу відповідь щодо його встановлення,

Відкрийте php.inifind extension_dir

У моєму випадку я повинен встановити extension_dir = /usr/lib/php5/20121212

І перезапустіть apache2: /ect/init.d/apache2 restart


0

ZIP-файл PHP включає більшість часто використовуваних розширень (* .dll у вікнах, таких як php_mysqli.dll) у каталозі \ ext, однак за замовчуванням вони не ввімкнені. Можливо, ви отримуєте цю фатальну помилку при спробі використовувати MySQLi:

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

Щоб увімкнути розширення, відкрийте php.ini (можливо, вам доведеться спочатку скопіювати php.ini-development як php.ini) і скасуйте коментарі (або додайте) ці два рядки:

extension_dir = "ext"

І будь-які конкретні розширення, для яких ви отримуєте фатальні помилки, тобто для mysqli:

extension=mysqli




0

Для тих, хто використовує docker, я зіткнувся з цією проблемою та вирішив її, використовуючи власний файл Docker замість php: fpm image:

FROM php:fpm

RUN docker-php-ext-install mysqli

0

Я знайшов рішення цієї проблеми після тривалої процедури аналізу. Після належного тестування моєї установки php за допомогою функцій командного рядка, я виявив, що php працює добре і може працювати з базою даних mysql. До речі. Ви можете запускати кодові файли з php-кодом за допомогою команди php -f filename.php.
Отже, я зрозумів, що це щось не так з Apache.
Я створив файл із лише функцією phpinfo () всередині.
Тут я побачив, що у рядку
Loaded Configuration File
мій конфігураційний файл не був завантажений, натомість там було згадано (жодного).

Нарешті, я знайшов у конфігурації Apache запис

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

Але я встановив PHP 7, і тому Apache не зміг завантажити файл php.ini, оскільки для цього не було жодного запису. я додав

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

і після перезапуску Apache все працює добре.

Ці блоки коду вище я знайшов у своєму файлі httpd-xampp.conf. Нехай це десь у вашій конфігурації.
У тому ж файлі, який я змінив до налаштувань php 7 як заміну версії 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"

Як бачите, у мене встановлений пакет xampp, але ця проблема була лише на стороні Apache.



0

Я використовую xampp, і моя проблема була виправлена ​​після перейменування:

extension_dir = "ext"

до

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

PS: Не забудьте перезапустити apache після внесення змін!


-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());
            }
        }
    }
?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.