PHP PHP 8LinuxWindows

PHP 8: После обновления PHP перестал работать прежний способ обращения к базе

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

После обновления PHP старое приложение может перестать подключаться к MySQL: удалённые mysql_* вызовы, отсутствующий драйвер PDO/mysqli и изменение режима обработки ошибок требуют разных исправлений.

В этой статье
  1. Когда возникает проблема и как её отличить
  2. Возможные причины и диагностические признаки
  3. Пошаговая диагностика и исправление
  4. Как проверить, что проблема устранена
  5. Если ошибка осталась

#Когда возникает проблема и как её отличить

После обновления PHP старое приложение может перестать подключаться к MySQL: удалённые mysql_* вызовы, отсутствующий драйвер PDO/mysqli и изменение режима обработки ошибок требуют разных исправлений.

#Возможные причины и диагностические признаки

Возможная причинаКак узнатьЧто делать
Используется удалённый API mysql_*Расширение mysql было удалено из PHP 7, а в PHP 8 его нет.Ошибка Call to undefined function mysql_connect()Переписать обращения на mysqli или PDO.
Не установлен драйвер базыВеб-PHP не загрузил pdo_mysql для текущей версии.Ошибка could not find driver при PDOВключить совместимое расширение для PHP-FPM.
PDO теперь сообщает исключениемС PHP 8 по умолчанию включён режим ошибок PDO::ERRMODE_EXCEPTION.После смены версии стали видны ошибки SQL как PDOExceptionИсправить сам SQL и обработать исключение без утечки секретов.

#Пошаговая диагностика и исправление

  1. Выясните точную ошибку обращения к базеОткройте журнал PHP для проблемного веб-запроса: Call to undefined function mysql_query, could not find driver, Access denied и PDOException требуют разных действий. Не меняйте пароль, порт и привилегии без указания на ошибку аутентификации. Сохраните резервную копию кода и базы перед миграцией API.
  2. Определите, чем код подключается к базеВ редакторе проекта найдите mysql_connect, mysqli_connect и new PDO. Если старый API mysql_* присутствует, его нельзя восстановить установкой модуля для PHP 8. Составьте список запросов и заменяйте их на PDO/mysqli поэтапно в тестовой копии.
  3. Проверьте расширение именно для веб-версииВ панели хостинга откройте активную версию PHP и включённые расширения. Для кода PDO с MySQL нужен драйвер pdo_mysql, для mysqli — расширение mysqli. Консольная команда php -m полезна, но показывает только CLI. На закрытой странице приложения проверьте extension_loaded("pdo_mysql") или extension_loaded("mysqli") и удалите страницу после теста.
  4. Подготовьте безопасное новое соединениеПри переходе с mysql_* на PDO задайте DSN с действительными host/dbname/charset, явно включите PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION и используйте подготовленные запросы с параметрами для пользовательского ввода. Точное имя базы и секреты берите из существующей закрытой конфигурации. Не публикуйте пароль и не подставляйте его в командную строку с историей оболочки.
  5. Разберите сообщение SQL отдельно от ошибки PHPЕсли драйвер есть, но соединение падает с SQLSTATE, смотрите код и текст без секретов: Access denied относится к учётным данным, Unknown database — к имени базы, ошибки синтаксиса — к запросу. Выполняйте проверки в тестовой базе с минимумом прав; не используйте общий аккаунт root для приложения.
  6. Проверьте чтение и запись на тестовой базеСначала выполните только чтение известной записи. Затем создайте тестовую запись и откатите её с помощью транзакции или удалите штатным способом, если это предусмотрено. Сравните строки и кодировку с прежним вариантом. Если запросы не проходят, верните предыдущие файлы приложения и проверьте журнал; на живой базе эксперименты не проводите.
  7. Командная строка под обычным пользователем: только перечень расширений CLI
    Linux · Терминал (Bash)Команда
    Командная строка под обычным пользователем: только перечень расширений CLI. Веб-версию проверяют отдельно.
    php -m

#Как проверить, что проблема устранена

Должны выполняться отдельные проверки подключения, чтения и контролируемой записи. В журнале не должно остаться undefined function/could not find driver, а при некорректных учётных данных приложение должно возвращать безопасное сообщение, а не показывать пароль или SQL.

#Если ошибка осталась

Повторите исходный сценарий в тестовой среде, откройте свежую запись журнала с точным временем, именем функции, файлом и строкой. Сравните новое сообщение с исходным: ошибка могла переместиться на следующий участок кода. Не подавляйте все ошибки общим обработчиком. Если изменения затрагивали работающий проект, восстановите сохранённую копию и разберите новое сообщение до повторного переноса.

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.