#Что происходит и когда применима инструкция
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. | Разделить отсутствие модуля и отказ БД в авторизации. |
#Подробная пошаговая инструкция
- Перепишите сообщение и тип DSN без учётных данныхВ журнале приложения найдите PDOException и его фразу; закройте адрес сервера БД, логин и пароль. Смотрите префикс строки подключения: mysql:, pgsql: или sqlite:. Ошибка could not find driver означает отсутствие поддержки этого типа соединения в текущей сборке PHP, а не обязательную неисправность самой БД.
- Определите версию и обработчик PHP сайтаОткройте панель хостинга, раздел настройки PHP нужного домена; при самостоятельной установке сопоставьте FastCGI-сокет виртуального хоста с listen в pool.d. Не считайте, что
php -mбез указания бинарника описывает тот же FPM. - SSH, чтение модулей PHP CLILinux · Терминал (Bash)КомандаSSH, чтение модулей PHP CLI. Если вывод пуст, это ещё не подтверждение отсутствия драйвера у веб-сайта.
php -v; php -m | grep -iE "^(pdo|pdo_mysql|pdo_pgsql|pdo_sqlite)$"
- Проверьте драйверы внутри веб-контекстаВ диагностическом маршруте под паролем администратора временно выведите только implode(",", PDO::getAvailableDrivers()) и PHP_VERSION, без строки DSN. Если PDO не определён, сначала проверьте установку базового расширения. После проверки удалите диагностический файл.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаSSH, только список PDO-драйверов CLI, не подключается к БД; PHP CLI и FPM могут отличаться.
php -r "echo implode(",", PDO::getAvailableDrivers()), PHP_EOL;"
- Проверьте наличие нужного пакета для вашей версииВ 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
- Установите только необходимое расширениеПосле резервной копии конфигурации в согласованное окно поставьте пакет подходящей версии через штатный менеджер. Например, для Debian с FPM 8.2 и DSN mysql: администратор может использовать sudo apt install php8.2-mysql, предварительно просмотрев список изменений. Для хостинга с управляемой PHP-сборкой запросите установку в панели или поддержке.
- Проверьте конфигурацию и примените измененияДля системного FPM выполните синтаксический тест, затем reload целевого экземпляра. В панели хостинга используйте её штатное применение изменений. После этого повторите закрытую проверку PDO::getAvailableDrivers().
- SSH, администратор, пример Debian + PHP 8.2Linux · Терминал (Bash)С осторожностьюНужен sudoSSH, администратор, пример Debian + PHP 8.2. Не перезапускайте чужие версии; ожидается успешный тест и активный пул.
sudo php-fpm8.2 -t && sudo systemctl reload php8.2-fpmКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Проверьте подключение приложением без раскрытия пароляЗапустите безвредную операцию чтения в штатном интерфейсе сайта. Если теперь возникло «Access denied» или «Connection refused», драйвер заработал, но отдельно нужно проверить права и адрес БД. Не открывайте порт базы данных в интернет ради проверки.
#Как проверить, что проблема исправлена
Веб-приложение видит нужный драйвер PDO, сообщение could not find driver исчезло, безопасный запрос чтения через существующее подключение выполняется.
#Если не помогло — дальнейшая диагностика и откат
Если драйвер по-прежнему не появляется, проверьте Loaded Configuration File и Scan this dir for additional .ini files именно веб-сборки. Не копируйте бинарные расширения от другого выпуска PHP.