Avatar ·

Ошибка PDOException "could not find driver" в PHP: причины и решение на LAMP

Всем привет! Я новичок в PHP и пытаюсь настроить подключение к MySQL через PDO на своём локальном сервере (LAMP — Linux, Apache, MySQL, PHP). У меня Ubuntu, я установил все компоненты через apt, но когда запускаю скрипт, получаю ошибку: ``` Fatal error: Uncaught PDOException: could not find driver in /var/www/html/test.php:3 ``` Вот мой код: ```php getMessage(); } ?> ``` Я уже проверил, что MySQL сервер запущен (через `systemctl status mysql`), база данных testdb существует, пользователь root без пароля работает в консоли MySQL. Но PHP всё равно ругается на "could not find driver". Что я делаю не так? Какие драйверы нужны и как их установить? Пробовал гуглить, но советы разнятся — кто-то говорит про pdo_mysql, кто-то про php-mysql. Помогите разобраться! <<>>

Причина ошибки

Ошибка "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 позволяет переключаться между окружениями без конфликтов.