#Что означает ошибка
Fatal error: Uncaught Error: Call to undefined function mysqli_connect()
Функции вроде mysqli_connect(), mb_strlen() и curl_init() не входят в ядро PHP. Они живут в отдельных расширениях (mysqli, mbstring, curl), которые собираются как модули и подключаются через php.ini. Если модуль не установлен или не подключён, интерпретатор не знает такой функции и в PHP 8 выбрасывает Uncaught Error: Call to undefined function (в PHP 7 сообщение начиналось с Fatal error).
Главная ловушка — у PHP почти всегда несколько окружений: консольный php (CLI), php-fpm или mod_php для сайта, иногда ещё и вторая версия PHP. У каждого свой php.ini. Поэтому «в консоли расширение есть, а сайт его не видит» — типичная ситуация, и начинать нужно с выяснения, какой именно PHP обслуживает ваш сайт.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Расширение не установленоВ системе нет пакета с модулем: на Debian и Ubuntu mysqli ставится пакетом php-mysql, а mbstring и curl — отдельными пакетами. | php -m не показывает mysqli/mbstring/curl, phpinfo() не содержит раздела с их именем. | Установите пакет под вашу версию PHP и перезапустите PHP-FPM или Apache. |
Расширение закомментировано в php.iniМодуль есть на диске, но строка extension=mysqli начинается с точки с запятой. Типично для Windows, XAMPP, OpenServer и самостоятельно собранного PHP. | В php.ini перед нужной строкой стоит ;. | Уберите ;, сохраните файл и перезапустите веб-сервер. |
Правится не тот php.iniВы изменили файл для CLI (/etc/php/8.3/cli/php.ini), а сайт читает /etc/php/8.3/fpm/php.ini. | В phpinfo() строка «Loaded Configuration File» указывает на другой файл. | Правьте файл из phpinfo() или положите настройку в conf.d, который читают оба окружения. |
| PHP не перезапущен или версия другаяИзменения подхватываются только после рестарта, а сайт может работать на PHP 7.4 или 8.1, когда вы ставили пакеты для 8.3. | phpinfo() показывает версию, отличную от php -v. | Перезапустите сервис нужной версии и выберите её в панели хостинга. |
#Пошаговое решение
- Узнайте версию и php.ini, которые использует сайтВ панели хостинга найдите выбранную для сайта версию PHP и режим PHP-FPM/CGI. Если доступен закрытый тестовый файл, посмотрите через
phpinfo()строкуLoaded Configuration Fileи версию PHP, затем обязательно удалите файл. Выводphp --iniв консоли показывает лишь PHP CLI и может не соответствовать сайту. - Проверьте, какие модули загруженыПосмотрите среди загруженных модулей веб-PHP расширение
mysqli; если отсутствует, это объясняет именноCall to undefined function mysqli_connect(). Не надо устанавливатьmbstringиcurl, если ошибка относится только кmysqli, и не меняйте код на старыйmysql_connect(). - Установите недостающий пакетДля Debian/Ubuntu администратор устанавливает пакет MySQL-расширений той же версии, что использует сайт, например
php8.3-mysqlдля PHP 8.3 из совместимого репозитория. Сначала проверьте, как PHP установлен панелью; у FastPanel/ISPmanager отдельные сборки и пути, поэтому системный пакет может не повлиять на PHP сайта. - На Windows и в сборках XAMPP/OpenServer включите модуль вручнуюЕсли это Windows-сборка PHP, откройте её фактический
php.ini, проверьтеextension=mysqliи расположениеextension_dir. В пакетах XAMPP/OpenServer изменяйте параметры только в панели активного PHP; не копируйте DLL от другой архитектуры или версии. - Перезапустите PHP и веб-серверПосле установки/включения модуля выполните согласованную перезагрузку нужного PHP-FPM или веб-сервера, затем снова проверьте
extension_loaded("mysqli")именно из веб-контекста. Если модуль есть, но ошибка сохраняется, возможно, сайт работает на другой версии PHP. - Проверьте результат и удалите info.phpПовторите запрос, ранее выдававший ошибку, и убедитесь, что вместо
undefined functionне появилась ошибка подключения БД. Удалите временныйinfo.php, если его создавали, и проверьте журнал PHP после теста.
#Установка и проверка на Linux
Команды ниже подходят для Ubuntu 22.04/24.04 и Debian 12. Если у вас установлено несколько версий PHP, посмотрите список командой ls /etc/php, а имена пакетов подставляйте по номеру нужной версии. Расширение mysqli приходит вместе с php-mysql, а mysqlnd — драйвер, который под капотом использует mysqli.
php --iniphp -m | grep -i mysqli# Для веб-сайта определите его версию PHP в панели: системная версия может отличаться.# Устанавливайте только совместимый пакет mysqli для фактической сборки PHP.#Хостинг и панели управления
На виртуальном хостинге (Beget, Timeweb, REG.RU, ISPmanager, cPanel) модули включаются в панели: раздел «Настройки PHP», «Расширения PHP» или «Select PHP Version». Отметьте mysqli, mbstring и curl, сохраните и подождите минуту. Если нужного расширения в списке нет, выберите другую версию PHP — часть расширений бывает только у определённых версий. Файл .user.ini или php.ini в каталоге сайта на многих хостингах разрешает менять лимиты, но подключать расширения через него обычно нельзя.
После обновления PHP в системе (например, apt upgrade перенёс сайт с 8.1 на 8.3) расширения старой версии не переносятся — их придётся поставить заново для новой версии. Подробно о подключении модулей — в и .