PHP: PDOException: could not find driver

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

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

Исключение PDOException could not find driver означает, что расширение PDO для нужной СУБД (pdo_mysql, pdo_pgsql, pdo_sqlite) не установлено или не включено в php.ini для используемой версии PHP. Установите пакет, включите расширение и перезапустите PHP.

В этой статье
  1. Что происходит
  2. Причины
  3. Порядок
  4. Проверка подключения
  5. Особенности разных окружений
could not find driver
PDOException: could not find driver
По-русскиPHP не нашёл драйвер PDO для базы данных.

#Что происходит

При создании new PDO('mysql:host=...') PHP ищет драйвер pdo_mysql. Если расширение не загружено, возникает ошибка could not find driver. Часто виновата не установка, а несоответствие окружений: расширение подключено для CLI, но не для PHP-FPM; установлено для одной версии PHP, а сайт работает на другой; закомментирована строка в php.ini; в DSN указан неверный префикс (например, mysqli: вместо mysql:).

#Причины

Возможная причинаКак узнатьЧто делать
Расширение не установленоМинимальная сборка.Список драйверов пуст.Установите пакет php-mysql.
Закомментирована строкаВ php.ini.Расширение не грузится.Раскомментируйте.
Разные php.ini для CLI и FPMПравили не тот файл.В консоли работает, на сайте нет.Правьте файл FPM.
Несколько версий PHPСайт на другой.Версии не совпадают.Установите расширение для нужной.
Ошибка в DSNОпечатка в префиксе.Драйвер 'mysqli' не существует.Используйте mysql:.
Хостинг отключил расширениеОграничения.Нет в списке.Включите в панели.

#Порядок

  1. Определите, на каком PHP возникает ошибкаЕсли сообщение появилось на сайте, войдите в панель хостинга и откройте настройки именно этого домена: запишите версию PHP и режим обработки (PHP-FPM, CGI и т. п.). При выполнении скрипта из консоли откройте терминал сервера и выполните php -v. Это два разных окружения: успешная проверка в консоли не доказывает исправность сайта. Не публикуйте страницу с полным phpinfo() в интернете.
  2. Узнайте название нужного драйвераОткройте конфигурацию приложения на сервере и найдите строку подключения PDO (DSN). Начало mysql: требует pdo_mysql, pgsql: — pdo_pgsql, sqlite: — pdo_sqlite. Проверьте, что случайно не указано mysqli: — это другое расширение. Не копируйте пароль, логин и полный DSN в сообщения поддержки или публичные отчёты.
  3. Проверьте драйвер именно в рабочем обработчикеДля консоли можно выполнить php -r "print_r(PDO::getAvailableDrivers());". Для сайта создайте на короткое время закрытую от посетителей диагностическую страницу в служебном каталоге с выводом PHP_VERSION и PDO::getAvailableDrivers() и откройте её через тот же домен. Сравните результат с нужным драйвером. После проверки удалите страницу. Если нет доступа к серверу, попросите хостера показать список PDO-драйверов веб-обработчика.
  4. Установите или включите расширение без смешения версийПри управляемом хостинге откройте настройки PHP → «Расширения» у нужного домена и активируйте найденный модуль; расположение пункта зависит от панели. На собственном Debian/Ubuntu администратор сначала проверяет версию PHP-FPM, затем подбирает пакет для неё в репозитории (например, пакет php8.2-mysql содержит pdo_mysql для PHP 8.2). Нельзя механически устанавливать пакет для другой версии PHP и ожидать, что он появится на сайте.
  5. Перезапустите нужный обработчик, если это требуетсяПосле установки пакета администратор определяет точное имя службы командой systemctl list-units --type=service | grep php и только затем перезапускает соответствующий PHP-FPM, например sudo systemctl restart php8.2-fpm лишь если это действительно активная служба данного сайта. На хостинге обычно достаточно сохранить параметры PHP; при отсутствии прав перезапуск делает поддержка. Не меняйте наугад другие сайты и версии.
  6. Проверьте исправление и соберите сведения о сбоеСнова откройте диагностический список: имя mysql/pgsql/sqlite должно присутствовать в PDO::getAvailableDrivers(). Удалите диагностический файл. Затем повторите исходную операцию приложения. Если ошибка осталась, сопоставьте фактическую версию PHP веб-сайта, префикс DSN и список драйверов и передайте эти данные администратору без учётных данных и паролей.
  7. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Список драйверов PDO для CLI
    Linux · Терминал (Bash)Команда
    Список драйверов PDO для CLI
    php -r 'print_r(PDO::getAvailableDrivers());'
    php -m | grep -i pdo
    Вариант 2Проверка в веб-окружении (откройте в браузере, затем удалите файл)
    PHPКоманда
    Проверка в веб-окружении (откройте в браузере, затем удалите файл)
    <?php
    header('Content-Type: text/plain');
    echo PHP_VERSION, "\n";
    print_r(PDO::getAvailableDrivers());
    echo php_ini_loaded_file(), "\n";
    Вариант 3Сначала установите реальную версию и обработчик PHP сайта; конкретные пакеты приводятся в тексте шага.
    Linux · Терминал (Bash)Команда
    Сначала установите реальную версию и обработчик PHP сайта; конкретные пакеты приводятся в тексте шага.
    php -v
    php --ini
    # Пакет и службу выбирают по ВЕРСИИ PHP сайта, не по версии CLI
    Вариант 4Установка драйверов (RHEL/Rocky/AlmaLinux)
    Linux · Терминал (Bash)КомандаНужен sudo
    Установка драйверов (RHEL/Rocky/AlmaLinux)
    sudo dnf install php-mysqlnd php-pgsql
    sudo systemctl restart php-fpm
    Вариант 5Пояснение, а не обязательные строки php.ini.
    INIКоманда
    Пояснение, а не обязательные строки php.ini. На Debian/Ubuntu модуль часто включается автоматически.
    ; Включайте только нужный драйвер PDO через штатные средства вашего дистрибутива или панели.
    ; Не вставляйте extension=... без проверки конфигурации.
    Вариант 6Найти активные php.ini для FPM и CLI
    Linux · Терминал (Bash)Команда
    Найти активные php.ini для FPM и CLI
    php --ini
    php-fpm8.2 -i | grep "Loaded Configuration"

#Проверка подключения

После включения проверьте подключение к базе: new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8mb4', $user, $pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);. Если появляется другая ошибка (Access denied, Connection refused), драйвер работает, и дальше нужно проверять логин, пароль и адрес сервера БД.

#Особенности разных окружений

В Docker-образах php:*-fpm расширения не включены по умолчанию: добавьте в Dockerfile строку RUN docker-php-ext-install pdo pdo_mysql (для PostgreSQL потребуются заголовки libpq-dev и pdo_pgsql) и пересоберите образ. В XAMPP и OpenServer расширения включают в панели или в php.ini соответствующей версии PHP, а после правки нужно перезапустить Apache. На виртуальном хостинге ISPmanager и cPanel версия и набор модулей выбираются отдельно для каждого сайта: переключатель находится в разделе «PHP» домена.

Если драйвер установлен, но ошибка остаётся, проверьте нет ли в окружении нескольких бинарников PHP: команда which -a php покажет их все, а php -v из консоли может относиться к другой версии, чем та, на которой запущен сайт.

Linux · Терминал (Bash)Команда
Все установленные бинарники PHP и версия FPM
which -a php
ls /usr/sbin/php-fpm* 2>/dev/null

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

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

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