Codeigniter: фатальная ошибка при вызове функции undefined mysqli_init()
Я только что изменил свой сервер и испытал эти ошибки ниже:
Fatal error: Call to undefined function mysqli_init() in /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php on line 126
A PHP Error was encountered
Severity: Warning
Message: Cannot modify header information - headers already sent by (output started at /home/blacktwitter/public_html/system/database/drivers/mysqli/mysqli_driver.php:126)
Filename: core/Common.php
Line Number: 564
Backtrace:
A PHP Error was encountered
Severity: Error
Message: Call to undefined function mysqli_init()
Filename: mysqli/mysqli_driver.php
Line Number: 126
Backtrace:
Веб-сайт находится в Codeigniter. Он работает на одном сервере очень хорошо и на локальной машине тоже. Но когда я загружаю этот сайт на новый сервер, у меня такие ошибки. Конечно, я изменил важные параметры, такие как подключение к базе данных, base_url() и т.д.
Я подозрительно относился к базе данных, но я создал новую базу данных и пользователей и т.д. и изменил информацию о подключении.
Почему это происходит? Будет полезно узнать, является ли это ошибкой на сервере или на веб-сайте. Также, когда я создаю некоторый index.html с некоторым тестовым кодом, все в порядке.
Ответы
Ответ 1
Это не ошибка в вашем приложении, это просто отсутствующий драйвер, поэтому у вас есть пара опций...
Перейдите в php init и раскомментируйте следующее:
extension=php_mysqli.dll
Если нет, попробуйте установить его на свой сервер, это зависит от вашего дистрибутива.
Попробуйте установить php5-mysqlnd
Если вы не можете сделать это с помощью ограничений хостинга, просто перейдите к драйверу mysql (не нужно менять другие конфигурации или запросы в CodeIgniter или что-то еще...)
как это (в вашем файле конфигурации)
$db['default']['dbdriver'] = 'mysql'; (you might have mysqli now)
Ответ 2
У меня была эта проблема при установке ubuntu16.04
, php7.1
с Codeigniter 3
.
Решение было простым (если трудно найти!)
sudo apt-get install php7.0-mysql
Я понял, что файлы mysql*.ini
отсутствуют в каталоге etc/php/7.1/mods-available
. Не знаю, как это произошло, но это сработало для меня.
Если вы используете 7.2, просто введите sudo apt-get install php7.2-mysql
Ответ 3
На самом деле это не проблема CodeIgniter, а проблема с установкой PHP.
Я установил PHP5.6 на свой Linux-сервер и испытываю трудности с поисковыми решениями с помощью команды ff, чтобы установить отсутствующий mysqli_extension в PHP.
То, что я пробовал, но возвращает предупреждающее сообщение: Не удается найти пакет php5-mysqli
sudo apt-get install php5-mysqli
Однако моя версия php - 5.6, поэтому я попробовал
sudo apt-get install php5.6-mysqli
Затем он работает.
Ответ 4
Использовать этот:
sudo apt-get install php7.*-mysqli
или же
sudo phpenmod mysqli
sudo service apache2 restart
Ответ 5
Откройте папку, в которой вы установили PHP, Edit php.ini
file
раскомментировать эту строку:
extension=php_mysqli.dll
Ответ 6
Для меня это была недостающая строка в php.ini, которая решила его, так как я скопировал еще один файл php.ini на мой XAMPP монтаж.
Стоит проверить, существует ли строка "extension=php_mysqli.dll
" (если выполняется Windows, но это неприменимо для OP, так как это система Linux), или если "extension_dir
" существует и является правильным.
Ответ 7
1, apt-get install (yum, compile install any) расширение php5-mysqlnd.
2, если не работает, убедитесь, что mysqli загружен
[email protected]:/etc/php5/apache2# cat /proc/31682/maps | grep mysql
Если вы загрузили, вы можете увидеть:
7f2cd3266000-7f2cd3285000 r-xp 00000000 fd:00 864561 /usr/lib/php5/20131226/mysqli.so
7f2cd69ef000-7f2cd6a2e000 r-xp 00000000 fd:00 864559 /usr/lib/php5/20131226/mysqlnd.so
3, если не загружен, используйте php -ini для поиска файла конфигурации
[email protected]:~$ php --ini
Configuration File (php.ini) Path: /etc/php5/apache2
Loaded Configuration File: /etc/php5/apache2/php.ini
Scan for additional .ini files in: /etc/php5/apache2/conf.d
Additional .ini files parsed: /etc/php5/apache2/conf.d/05-opcache.ini,
/etc/php5/apache2/conf.d/20-mysqli.ini
4, если не расширение конфигурации, выполните настройку, подобную этой, и запустите перезапуск веб-сервера
[email protected]:~$ cat /etc/php5/apache2/conf.d/20-mysqli.ini
; configuration for php MySQL module
; priority=20
extension=mysqli.so
Ответ 8
В Linux вы можете установить расширение драйвера MySQL.
sudo apt-get install php-mysql
В Windows с XAMPP драйвер уже сохранен в каталоге ext, но вам нужно включить его в php.ini. Вы должны раскомментировать эту строку:
extension=php_mysqli.dll
Вам также необходимо проверить расположение каталога расширений в php.ini. Я использую объявление абсолютного пути (не относительного пути), чтобы оно работало.
extension_dir="your\absolute\path\to\xampp\php\ext"
Например,
extension_dir="C:\xampp\php\ext"
Ответ 9
Я попробовал, прокомментирую ниже строку в файле /etc/php/cli/php.ini
.
extension=php_mysqli.dll
Я использую Ubuntu 16.04 для экземпляров AWS-EC2 и PHP 7.0. Это решило мою проблему.
Ответ 10
В моем случае с использованием Windows у меня были все необходимые расширения без комментариев, но они не загружались. Затем я проверил переменную каталога расширений в php.ini, и это было как "ext"
, но потом я вспомнил, что раньше у меня была похожая проблема. Так что я сделал в основном явный каталог. Что-то вроде этого:
extension_dir = "C:\php\ext"
Конечно, конкретный каталог ext полностью зависит от ваших настроек и местоположений.
После обновления файла php.ini вам просто нужно перезапустить Apache, чтобы применить изменения.
Если вы установили Apache вручную (не используя предварительно упакованные решения, такие как XAMPP или WAMPP), вам просто нужно использовать эти команды либо в командной строке, либо в Powershell с правами администратора.
net stop Apache2.4
net start Apache2.4
Ответ 11
Проблема в том, что расширение php mysql может не быть установлено, если вы используете php 7, просто введите приведенную ниже команду и установите расширение,
sudo apt-get install php-mysql
Ответ 12
Если ваш веб-сервер работает с более низкой версией MySQL, вы получите эту ошибку, поскольку MySQLi не поддерживается в MySQL < 4.1.3
Настоятельно рекомендуется использовать MySQLi вместо возврата к расширению MySQL.
Дополнительная информация о php.net
Ответ 13
Я предлагаю вам сделать следующее:
менять:
'dbdriver' => 'mysqli',
'dbprefix' => '',
чтобы:
'dbdriver' => 'mysql',
'dbprefix' => '',
в файле database.php
.