PDOException «не удалось найти драйвер» - PullRequest
258 голосов
/ 18 мая 2010

Я только что установил Debian Lenny с Apache, MySQL и PHP и получаю исключение PDOException could not find driver.

Это конкретная строка кода, на которую она ссылается:

$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

DB_HOST, DB_NAME, DB_USER и DB_PASS - константы, которые я определил. Он отлично работает на рабочем сервере (и на моей предыдущей установке Ubuntu Server).

Это как-то связано с моей установкой PHP?

Поиск в Интернете не помог, все, что я получаю, это обмен экспертами и примеры, но без решений.

Ответы [ 37 ]

1 голос
/ 21 сентября 2018

Неправильная установка PHP была вызвана

У меня была такая же проблема. И я надеюсь, что это поможет кому-то, у кого проблема похожа на меня.

Сценарий

OS = Windows 10  
Platform = XAMPP  
PHP Version = 7 (Multiple Version seem to have been installed in the PC)  

Я создал phpinfo.php файл в папке public и запустил phpinfo(), чтобы найти местоположение моего php.ini файла.

PHP.ini Location = c:\xampp\php\php.ini

Задача
Вызов c:\xampp\htdocs> php -v вернул PHP 7.2.3, но phpinfo.php показал PHP 7.2.2.

Решение
Вместо звонка

php artisan migrate:install   

, который дал мне эту ошибку, я использовал

c:\xampp\php\php artisan migrate:install

и это сработало.

1 голос
/ 29 июня 2016

Еще одна вещь, которую нужно подтвердить, поскольку некоторые люди для начала копируют / вставляют пример кода из Интернета. Убедитесь, что MySQL введен здесь:

... $dbh = new PDO ("mysql: ...  

В некоторых примерах это показывает

$dbh = new PDO ("dblib ...
1 голос
/ 13 февраля 2018

Куда бы я ни пошел, я читаю, что путь extension_dir должен быть изменен с ext на абсолютный путь. Это сработало для меня. Однако при попытке построить сервер на компьютере моего коллеги мне пришлось указать значение ext вместо указания абсолютного пути.

Если вы указали абсолютный путь, и он все еще не найден, попробуйте как абсолютный путь, так и ext.

1 голос
/ 23 июля 2016

У меня была такая же проблема при запуске тестов с отдельным php.ini. Мне пришлось добавить эти строки в мой собственный файл php.ini:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

Примечание: именно в этом порядке

1 голос
/ 17 февраля 2017

Для тех, кто использует Symfony2 / 3 и интересуется, почему вы получаете эту ошибку. Если вы используете "mapping_types", вы можете столкнуться с этой ошибкой. Причина в том, что «mapping_types» находится на неправильном уровне. Например:

doctrine:
  dbal:
    mapping_types:
        set: string

Этот "тип отображения" должен быть размещен на этом уровне:

doctrine:
dbal:
    #To counter the error caused by 'mapping_types'
    connections:
        default:
            server_version: %database_server_version%
            mapping_types:
                set: string

Надеюсь, это поможет

Я нашел решение здесь: https://github.com/doctrine/DoctrineBundle/issues/327

1 голос
/ 31 октября 2016

В моем случае я использовал PDO с php-cli, и он работал нормально.

Только когда я попытался подключиться из apache, у меня возникла проблема «отсутствует драйвер», которую я не совсем понял.

Простое apt-get install php-mysql решило это. (Ubuntu 16.04 / PHP7. Кредиты переходят к выбранному ответу и комментарию Ивана)

Надеюсь, это поможет.

0 голосов
/ 19 октября 2018

Если вы прочитали весь ответ выше и он все равно не работает ...

Убедитесь, что ваша строка подключения PHP PDO в порядке. Не как у меня:

$dbh = new PDO('"mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)

В сообщении об ошибке отсутствует информация о том, какой драйвер не найден.

После переустановки всех возможных библиотек PDO и MySQL я обнаружил, что " в начале строки подключения.

0 голосов
/ 03 июня 2013
$DB_TYPE = 'mysql'; //Type of database<br>
$DB_HOST = 'localhost'; //Host name<br>
$DB_USER = 'root'; //Host Username<br>
$DB_PASS = ''; //Host Password<br>
$DB_NAME = 'database_name'; //Database name<br><br>

$dbh = new PDO("$DB_TYPE:host=$DB_HOST; dbname=$DB_NAME;", $DB_USER, $DB_PASS); // PDO Connection

Это сработало для меня.

0 голосов
/ 05 сентября 2014

У меня было то же исключение при попытке использовать pdo_sqlite.Проблема заключалась в том, что автоматически созданные символические ссылки 20-pdo_sqlite.ini и 20-sqlite3.ini/etc/php5/mods-enabled) были сломаны.

Удаление поврежденных символических ссылок и добавление их вручную с помощью:

  • sudo ln -s /etc/php5/mods-avaliable/pdo_sqlite.ini /etc/php5/mods-enabled/20-pdo_sqlite.ini
  • sudo ln -s /etc/php5/mods-avaliable/sqlite3.ini /etc/php5/mods-enabled/20-sqlite3.ini

исправил проблему.

Примечание: это не будет работать для более старых версий php, так как они не искаликонфиги в /etc/php5/mods-enabled

0 голосов
/ 02 апреля 2015

Была такая же проблема и только что выяснилось, что сайт работает под php MAMP, но когда вы вызываете команду, он запускает mac (если не изменен путь bash). у вас будут проблемы, когда у Mac нет этих расширений.

запустите php -i, чтобы найти загруженные расширения и установить те, которые вы пропустили. или запустите '/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {ваша команда}', чтобы использовать MAMP

...