PHP на сервере Linux, PHP-FPM (версия уточняется)

PHP на сервере: При использовании PDO появляется ошибка отсутствующего драйвера

  • Обновлено
  • Чтение ≈ 3 минуты
  • Нужны права администратора

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

PDO может присутствовать в PHP, но нужный драйвер базы данных — отсутствовать: при соединении PDO с DSN mysql: или sqlite: появляется сообщение «could not find driver». Сначала нужно определить имя используемого драйвера и конкретную версию PHP сайта; наличие расширения mysqli не означает автоматически наличие pdo_mysql.

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

#Что происходит и когда применима инструкция

PDO может присутствовать в PHP, но нужный драйвер базы данных — отсутствовать: при соединении PDO с DSN mysql: или sqlite: появляется сообщение «could not find driver». Сначала нужно определить имя используемого драйвера и конкретную версию PHP сайта; наличие расширения mysqli не означает автоматически наличие pdo_mysql.

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

Возможная причинаКак узнатьЧто делать
PDO включён, но драйвер базы не установленPDO включён, но драйвер базы не установлен. PDO::getAvailableDrivers() не содержит mysql, pgsql или sqlite в зависимости от DSN.PDO::getAvailableDrivers() не содержит mysql, pgsql или sqlite в зависимости от DSN.Установить pdo_mysql/pdo_pgsql/pdo_sqlite соответствующей версии PHP.
Проверяется не тот PHPПроверяется не тот PHP. В SSH драйвер есть, веб-FPM сообщает could not find driver.В SSH драйвер есть, веб-FPM сообщает could not find driver.Сверить модули PHP CLI и реального пула сайта.
Сообщение относится к другому этапуСообщение относится к другому этапу. При неправильном логине возникает SQLSTATE[HY000] [1045], а не could not find driver.При неправильном логине возникает SQLSTATE[HY000] [1045], а не could not find driver.Разделить отсутствие модуля и отказ БД в авторизации.

#Подробная пошаговая инструкция

  1. Перепишите сообщение и тип DSN без учётных данныхВ журнале приложения найдите PDOException и его фразу; закройте адрес сервера БД, логин и пароль. Смотрите префикс строки подключения: mysql:, pgsql: или sqlite:. Ошибка could not find driver означает отсутствие поддержки этого типа соединения в текущей сборке PHP, а не обязательную неисправность самой БД.
  1. Определите версию и обработчик PHP сайтаОткройте панель хостинга, раздел настройки PHP нужного домена; при самостоятельной установке сопоставьте FastCGI-сокет виртуального хоста с listen в pool.d. Не считайте, что php -m без указания бинарника описывает тот же FPM.
  2. SSH, чтение модулей PHP CLI
    Linux · Терминал (Bash)Команда
    SSH, чтение модулей PHP CLI. Если вывод пуст, это ещё не подтверждение отсутствия драйвера у веб-сайта.
    php -v; php -m | grep -iE "^(pdo|pdo_mysql|pdo_pgsql|pdo_sqlite)$"
  1. Проверьте драйверы внутри веб-контекстаВ диагностическом маршруте под паролем администратора временно выведите только implode(",", PDO::getAvailableDrivers()) и PHP_VERSION, без строки DSN. Если PDO не определён, сначала проверьте установку базового расширения. После проверки удалите диагностический файл.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    SSH, только список PDO-драйверов CLI, не подключается к БД; PHP CLI и FPM могут отличаться.
    php -r "echo implode(",", PDO::getAvailableDrivers()), PHP_EOL;"
  1. Проверьте наличие нужного пакета для вашей версииВ Debian/Ubuntu pdo_mysql обычно поставляется с phpX.Y-mysql, pdo_sqlite — с phpX.Y-sqlite3, pdo_pgsql — с phpX.Y-pgsql. Сначала выясните установленную версию и доступность пакета командой apt-cache policy; на Fastpanel, контейнерах и независимых сборках /opt/php используйте их собственный способ установки.
    Linux · Терминал (Bash)Команда
    SSH на Debian/Ubuntu, только чтение доступных версий. Указание 8.2 — пример; нельзя устанавливать его для сайта на 8.5 по привычке.
    apt-cache policy php8.2-mysql php8.2-sqlite3 php8.2-pgsql
  1. Установите только необходимое расширениеПосле резервной копии конфигурации в согласованное окно поставьте пакет подходящей версии через штатный менеджер. Например, для Debian с FPM 8.2 и DSN mysql: администратор может использовать sudo apt install php8.2-mysql, предварительно просмотрев список изменений. Для хостинга с управляемой PHP-сборкой запросите установку в панели или поддержке.
  1. Проверьте конфигурацию и примените измененияДля системного FPM выполните синтаксический тест, затем reload целевого экземпляра. В панели хостинга используйте её штатное применение изменений. После этого повторите закрытую проверку PDO::getAvailableDrivers().
  2. SSH, администратор, пример Debian + PHP 8.2
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    SSH, администратор, пример Debian + PHP 8.2. Не перезапускайте чужие версии; ожидается успешный тест и активный пул.
    sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpm

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. Проверьте подключение приложением без раскрытия пароляЗапустите безвредную операцию чтения в штатном интерфейсе сайта. Если теперь возникло «Access denied» или «Connection refused», драйвер заработал, но отдельно нужно проверить права и адрес БД. Не открывайте порт базы данных в интернет ради проверки.

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

Веб-приложение видит нужный драйвер PDO, сообщение could not find driver исчезло, безопасный запрос чтения через существующее подключение выполняется.

#Если не помогло — дальнейшая диагностика и откат

Если драйвер по-прежнему не появляется, проверьте Loaded Configuration File и Scan this dir for additional .ini files именно веб-сборки. Не копируйте бинарные расширения от другого выпуска PHP.

Так эту ошибку тоже называют

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

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