#Что происходит и когда применима инструкция
После смены версии PHP расширение mysqli может оказаться не установленным или не активированным именно для обработчика сайта. Типичный признак — Call to undefined function mysqli_connect() либо Class "mysqli" not found, хотя PHP CLI на сервере может показывать другой набор модулей.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Расширение не установлено для новой версииРасширение не установлено для новой версии. В веб-процессе extension_loaded("mysqli") = false после обновления. | В веб-процессе extension_loaded("mysqli") = false после обновления. | Установить совместимый пакет для нужной версии. |
| CLI и FPM загружают разные ini-файлыCLI и FPM загружают разные ini-файлы. php -m показывает mysqli, а веб-сайт — нет. | php -m показывает mysqli, а веб-сайт — нет. | Сверить Loaded Configuration File и дополнительные ini. |
| Ошибка не в mysqliОшибка не в mysqli. Расширение есть, но подключение к базе не работает из-за имени сервера или учётных данных. | Расширение есть, но подключение к базе не работает из-за имени сервера или учётных данных. | Искать отдельное сообщение mysqli_sql_exception. |
#Подробная пошаговая инструкция
- Запишите буквальное сообщение и версию сайтаОткройте журнал сайта и сохраните несколько строк вокруг первой ошибки. Разделите «undefined function» и «Access denied for user»: первое свидетельствует об отсутствии расширения, второе — о подключении к БД. Не копируйте пароли БД в переписку.
- Проверьте версию PHP, которой обслуживается доменВ панели хостинга откройте настройки PHP для сайта; на самостоятельном сервере определите FastCGI-сокет виртуального хоста и соответствующий экземпляр FPM. Нельзя считать php -v в SSH версией сайта.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаSSH, только диагностика CLI; результат может отличаться от FPM и не доказывает наличие модуля на сайте.
php -v; php -m | grep -iE "^(mysqli|pdo_mysql)$"
- Подтвердите отсутствие модуля через защищённую веб-проверкуВ закрытом от внешнего доступа диагностическом маршруте выполните extension_loaded("mysqli") и PHP_VERSION, проверьте php_ini_loaded_file(). Если модуль уже активен, перейдите к ошибке соединения или PHP-коду. Удалите маршрут после проверки.
- Установите модуль только для нужного пакета PHPНа Debian/Ubuntu с официальными пакетами mysqli обычно входит в пакет phpX.Y-mysql, где X.Y соответствует версии FPM. Сначала посмотрите наличие такого пакета в подключённых репозиториях; затем установите его обычным менеджером. На Fastpanel, сборках /opt/php и контейнерах способ установки другой — используйте панель или инструкцию поставщика, не смешивайте пакетные каталоги.
- SSH на Debian/Ubuntu, только чтение доступности и установленных пакетовLinux · Терминал (Bash)КомандаSSH на Debian/Ubuntu, только чтение доступности и установленных пакетов. Замените номер версии; установка пока не выполняется.
apt-cache policy php8.2-mysql; dpkg -l | grep -E "php8.2-(fpm|mysql)"
- Если пакет доступен, запланируйте установку с резервной копиейСогласуйте окно обслуживания. Пример для Debian/Ubuntu: sudo apt install php8.2-mysql, если версия сайта действительно 8.2 и пакет обслуживается вашим репозиторием. Установка изменяет систему; перед этим проверьте список планируемых пакетов, зависимости и способ отката. При использовании панели и сторонней сборки следуйте её схеме.
- Проверяйте конфигурацию FPM перед применениемПосле установки проверьте тест FPM и перечитайте только выбранную службу. Снова сравните extension_loaded("mysqli") в защищённой веб-проверке, затем удалите её и откройте страницу, которая раньше падала.
- SSH с административными правами, пример Debian PHP 8.2Linux · Терминал (Bash)С осторожностьюНужен sudoSSH с административными правами, пример Debian PHP 8.2. Применяйте только если тест успешен и служба соответствует сайту.
sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpmКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Разделите проблему расширения и базы данныхЕсли mysqli загрузился, но приложение пишет Access denied или Connection refused, проверьте адрес сервера БД, права пользователя, socket и доступность порта. Не изменяйте чужие учётные записи и не открывайте MySQL наружу ради проверки.
#Как проверить, что проблема исправлена
На сайте mysqli доступен и прежний вызов не выдаёт undefined function; обычный запрос к базе приложения работает с существующими безопасными правами.
#Если не помогло — дальнейшая диагностика и откат
Если в веб PHP mysqli не появился, найдите фактически используемую сборку и папку расширений. Не копируйте .so из другой версии PHP — они могут быть ABI-несовместимы.