Как решить «Неустранимая ошибка: класс« MySQLi »не найден»?

95

Я делаю учебное пособие и получаю эту ошибку:

Неустранимая ошибка: класс MySQLi не найден (ДЛИННЫЙ URL) в строке 8

Код в строке 8:

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

Я видел в Интернете, что кто-то сказал, чтобы проверить, включен ли он в моем phpinfo (), но там не было ничего, указанного в разделе «mysqli».

Кроме того, я использую PHP версии 5.2.5.

Тайлор
источник
Вы можете использовать рукописный класс MYSQLi , поэтому вам не нужно устанавливать mysqli. Это единственное решение, если у вас нет сервера.
цыплята
связанные: stackoverflow.com/questions/19305919/…
Fzs2 03

Ответы:

86

Похоже, вам просто нужно установить MySQLi .

Если вы думаете, что сделали это, но проблема не исчезла, опубликуйте свою операционную систему и все, что может помочь в ее дальнейшей диагностике.

Грег
источник
21
На AWS вы просто бежитеsudo yum install php-mysqli
бобобобо
Для меня это было исправлено с помощью: apt-get install php7.0-mysql. Я бегаю на Raspbian Stretch 9
negrotico19
На AWS с amazon linux это будет что-то вроде sudo yum install php56-mysqlnd.x86_64(выберите ту, которая соответствует той версии php, которую вы установили)
auspicious99
47

Вы можете проверить наличие библиотек mysqli, выполнив этот код:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79
источник
6
Я все еще получаю "У нас нет mysqli !!!" даже после запуска `sudo apt-get install php5-mysqlnd`?
Banned_User 01
Я получаю сообщение «Уф, у нас это есть, но я продолжаю получать ту же ошибку, что и класс« msqli », не найденный в ... какие-либо идеи?
PA-GW
38

Если ты на Ubuntu , запустите:

 sudo apt-get install php-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
22

Если вы вызываете «new mysqli (..)» из класса, имеющего пространство имен, вы можете увидеть аналогичную ошибку Fatal error: Class 'foo\bar\mysqli' not found in. Способ исправить это - явно установить его в корневое пространство имен с предшествующей обратной косой чертой, например:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
Alexkb
источник
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
5

Моя ОС - Ubuntu . Я решил эту проблему, используя:

sudo apt-get install php5-mysql
user3839088
источник
На 19 монетном дворе: sudo apt-get install php-mysql
Аилтон Ф. Силва
2

Если вы используете Docker ...

Внутри php-контейнера RUN:

#docker-php-ext-install mysqli

#apachectl restart
Reyqueson
источник
2

Как включить mysqli в php.ini

  1. Отредактируйте / раскомментируйте, удалив ';' (двоеточие) следующую конфигурацию в php.ini: 1st (раскомментируйте и добавьте конфигурацию):
    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
Гани
источник
1

Я думал, что смогу помочь кому-нибудь с той же проблемой, используя серверы Namesco. Я пытался решить эту проблему после перемещения базы данных с моего локального сервера на домашнем компьютере на namesco. Они не помогли, они сказали, что это проблема кодирования.

  • Однако это было просто исправить из интерфейса хостинга CPANEl LINUX.
  • Щелкните php.
  • затем щелкните модули php и в их списке предустановленных модулей просто щелкните поле для mysqli.
  • Затем нажмите "Сохранить". (Не нужно менять код, если он работал (а) на другом сервере.)

К сожалению, их статьи в поддержку были пустой тратой времени. Прочитав это, я перешел в интерфейс администратора с новым определением.

Джон
источник
0

Некоторые дистрибутивы (например, Gentoo ) поддерживают несколько установок PHP, и вы должны убедиться, что используете один с установленным и включенным mysqli.

В Gentoo я установил новый PHP (с включенным USE-флагом mysqli), но мне нужно было активировать новую версию 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

vanduc1102
источник
0

ZIP-архив PHP включает большинство часто используемых расширений (* .dll в Windows, таких как 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

в Ubuntu:

sudo apt-get install php-mysql
sudo service apache2 restart
Vishalknishad
источник
0

При новой установке PHP удалите ;ранее extension_dirв php.ini.

Андрей
источник
0

в Debian 10

apt install php-mysql

/etc/init.d/apache2 restart
Сальвадор Руэда
источник
0

Для всех, кто использует docker, я столкнулся с этой проблемой и решил ее, используя свой собственный Dockerfile вместо изображения php: fpm:

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

установить phpXX-расширение на PHP. В моем случае с FreeBSD:

pkg install php74-extensions
Биддут Митра
источник
0

Я использую xampp, и моя проблема была исправлена ​​после переименования:

extension_dir = "ext"

к

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

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

Андрей
источник
0

В php.ini:

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

Убедитесь, что версия PHP верна.

Папа Майк
источник
0
  1. Откройте папку PHP.
  2. Найдите php.ini-development и откройте его.
  3. найти ;extension=mysqli
  4. удалить ; символ
  5. сохраните файл и измените расширение файла с php.ini-development на php.ini
  6. Перезагрузите сервер и проверьте код:
    if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {  
            echo 'We don\'t have mysqli!!!';  
     } else {  
         echo 'mysqli is installed';
     }
  1. если он не работает, измените extension_dir в php.ini с «ext» на «c: \ php \ ext» и extension = mysqli на extension = php_mysqli.dll, затем проверьте снова Не забудьте перезагружать сервер каждый раз при тестировании
Такаши Анжи
источник
-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());
            }
        }
    }
?>
хари
источник