Ошибка PDOException "could not find driver" в PHP: причины и решение на LAMP
Причина ошибки
Ошибка "could not find driver" возникает, когда в PHP отсутствует соответствующий драйвер PDO для вашей базы данных. В вашем случае — для MySQL. PDO — это абстрактный слой, который сам по себе не умеет общаться с конкретными СУБД. Для этого нужны расширения-драйверы, например pdo_mysql для MySQL.
На LAMP-стеке (Ubuntu) часто устанавливают только базовый пакет PHP без дополнительных модулей. Проверьте, установлен ли драйвер, выполнив в терминале:
php -m | grep pdo
Если вы видите только pdo, но не pdo_mysql, значит драйвера нет. Вот полный список того, что должно быть:
pdo— основное расширение (обычно есть)pdo_mysql— драйвер для MySQL
Решение: установка драйвера pdo_mysql
На Ubuntu (Debian-based) выполните следующие команды в терминале:
sudo apt update
sudo apt install php-mysql
Пакет php-mysql автоматически подтянет нужные зависимости, включая pdo_mysql и mysqli. После установки перезапустите Apache:
sudo systemctl restart apache2
Затем снова проверьте:
php -m | grep pdo
Теперь вы должны увидеть и pdo, и pdo_mysql. После этого ваш скрипт заработает.
Важные нюансы
- Версия PHP: Убедитесь, что устанавливаете пакет для вашей версии PHP. Если у вас PHP 8.1, команда может быть
sudo apt install php8.1-mysql. Узнать версию:php -v. - Не путайте с mysqli:
php-mysqlустанавливает оба драйвера — и PDO (pdo_mysql), и процедурный (mysqli). Если вам нужен только PDO, можно установитьphp-pdoотдельно, но проще поставить всё сразу. - Другие СУБД: Если в будущем будете работать с PostgreSQL, SQLite и т.д., нужно устанавливать соответствующие драйверы:
php-pgsql,php-sqlite3.
Проверка работоспособности
После установки запустите тестовый скрипт:
<?php
phpinfo();
?>
Найдите секцию "PDO" — там должны быть перечислены "PDO drivers" со значением "mysql". Если всё в порядке, ошибка исчезнет.
Альтернативный способ: через php.ini
Иногда драйвер установлен, но не включён. Проверьте файл php.ini (обычно в /etc/php/8.x/apache2/php.ini). Раскомментируйте строку:
extension=pdo_mysql
Уберите точку с запятой в начале, сохраните файл и перезапустите Apache.
После всех действий ошибка PDOException "could not find driver" больше не появится. Удачи в разработке!
<<Альтернативный подход: использование Docker или готового окружения
Если вы часто сталкиваетесь с проблемами настройки LAMP вручную, рекомендую рассмотреть использование Docker. Это изолирует среду и избавит от путаницы с драйверами.
Пример простого docker-compose.yml для PHP + MySQL:
version: '3.8'
services:
php:
image: php:8.1-apache
volumes:
- ./src:/var/www/html
ports:
- "8080:80"
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
Образ php:8.1-apache уже включает все необходимые драйверы PDO, включая pdo_mysql. Вам не нужно вручную устанавливать расширения. Просто запустите docker-compose up -d и подключайтесь к MySQL через хост mysql (имя сервиса).
Если хотите остаться на LAMP, но упростить жизнь — используйте готовые сборки вроде XAMPP или Laragon (для Windows). Они уже содержат все драйверы "из коробки".
Этот подход особенно полезен, если вы работаете на разных проектах с разными версиями PHP или базами данных — Docker позволяет переключаться между окружениями без конфликтов.
Ответов пока нет.
Войдите чтобы оставить ответ