Ошибки

PHP: Call to undefined function mysqli_connect() — что делать

В PHP нет модуля для работы с MySQL и MariaDB. В Ubuntu он ставится пакетом php8.3-mysql, после установки нужно перезапустить PHP-FPM. Если же в сообщении mysql_connect без буквы i, программа написана для PHP старше 7.0.

≈ 4 мин чтения
Содержание 8

Как выглядит ошибка

PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_connect() in /var/www/example.com/db.php:4

PHP не знает функцию mysqli_connect: модуль mysqli не установлен или не включён. В журнале после этой строки идут строки Stack trace: — цепочка вызовов, которая привела к ошибке. Для поиска причины хватает первой строки.

Если программа подключается к базе через PDO, та же причина выглядит иначе:

PHP Fatal error:  Uncaught PDOException: could not find driver in /var/www/example.com/db.php:4

could not find driver — у PDO нет модуля для базы из строки подключения. Для MySQL и MariaDB его ставит тот же пакет.

Как поставить модуль

Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.

sudo apt install php8.3-mysql

Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. На вопрос Do you want to continue? [Y/n] нажмите Y и Enter. Пакет добавляет в PHP модули mysqli, mysqlnd и pdo_mysql. Перезапустите PHP-FPM, чтобы сайт их увидел:

sudo systemctl restart php8.3-fpm

Если команда ничего не ответила, PHP перезапущен. Проверьте, что модуль на месте:

php -m | grep mysqli

Если в ответе строка mysqli — модуль установлен. Откройте страницу ещё раз. Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.

Если база PostgreSQL и PDO пишет could not find driver, поставьте php8.3-pgsql.

Если в сообщении mysql_connect

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in /var/www/example.com/db.php:4

Функции mysql_… без буквы i устарели в PHP 5.5.0 и удалены в PHP 7.0.0. Никакой пакет их не вернёт. Программе нужна новая версия, где подключение к базе переписано на mysqli или PDO. Если это ваш код — передайте сообщение разработчику.

Не ставьте ради такой программы старый PHP: поддержка последней версии PHP 5 — 5.6 — закончилась 31 декабря 2018 года, исправлений безопасности для неё нет.

Если это WordPress

WordPress при той же причине показывает своё сообщение о том, что в PHP нет расширения MySQL. Разбор с теми же шагами — WordPress: нет расширения MySQL.

Если модуль стоит, а ошибка осталась

  • Вы не перезапустили PHP-FPM — выполните sudo systemctl restart php8.3-fpm.
  • На сервере несколько версий PHP, и модуль поставлен не для той, на которой работает сайт. Версию PHP сайта видно в файле настроек nginx, в строке fastcgi_pass: php8.3-fpm.sock — это PHP 8.3. Поставьте пакет с тем же номером.
  • Модуль выключен. Включите его: sudo phpenmod mysqli, затем перезапустите PHP-FPM.

Ошибки рядом

Что видитеЧто делать
Call to undefined function с другим именемкакой модуль поставить
Access denied for userMySQL не принял логин или пароль
Unable to locate package php8.3-mysqlapt не нашёл пакет
другая ошибка PHPнайдите её в списке

Источники

Сверено 14 октября 2026 года.

Что почитать дальше