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 ]

4 голосов
/ 23 июля 2014

Для PHP 5.5 на CentOS Я исправил это, установив пакет php55-mysqlnd.

sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi

Чтобы получить справку по установке, напишите комментарий, так как это зависит от того, как PHP установлен в вашей системе. Доступны репо webtatic и remi.

3 голосов
/ 04 января 2017

Я провел последний день, пытаясь понять, почему я получаю следующую ошибку. Я использую Ubuntu 14.04.

Проблема:
Я заметил, что моя версия PHP-CLI работала с php7.0, но php_info () (веб-версия) отображала php 5.5.9. Хотя php_info () говорит, что pdo был включен, использование командной строки (CLI) не распознало команду pdo_mysql. Оказывается, mysql был включен для моей старой версии, но не для версии CLI. Все, что я сделал, это установил mysql для php7.0, и он смог работать.

Вот что сработало:

Для проверки версии:

php -v

Для установки mysql для php7.0

sudo apt-get install php7.0-mysql

1) убедитесь, что ваша версия CLI совпадает с вашей веб-версией
2) Если они отличаются, убедитесь, что в вашей версии CLI есть плагин mysql, поскольку он не поставляется с ним по умолчанию.

3 голосов
/ 19 декабря 2017

для Windows 8.1 / 10 в файле: \\ php.ini вы должны раскомментировать строку "extension = pdo_mysql"

2 голосов
/ 08 декабря 2015

Проблема в том, что отсутствует библиотека php to mysql. В CentOs я исправил это, запустив # yum install php-mysql и затем перезапуск apache с # /bin/systemctl restart httpd.service Обратите внимание, что именование немного отличается от дистрибутивов на основе Debian / Ubuntu, php-> php5 и httpd-> apache2.

2 голосов
/ 21 июня 2012

В моем случае моя строка DSN была неправильной, в частности она не содержала mysql://. Я ожидал бы другое сообщение об ошибке, возможно, что-то вроде «DSN строка не указывает драйвер / протокол».

Добавление mysql:// в начало строки DSN решило проблему.

2 голосов
/ 17 сентября 2016

Я настоятельно рекомендую mysqllnd вместо mysql, потому что у вас будет много проблем, таких как преобразование чисел, и тип бит оценивает проблему с расширением mysql.

в Ubuntu установите mysqllnd с помощью следующей команды:

sudo apt-get install php5-mysqlnd
2 голосов
/ 18 августа 2012

Проверьте, правильно ли установлен extension_dir в файле конфигурации php. Попробуйте прокомментировать / раскомментировать некоторые расширения и посмотреть, отражено ли это в phpinfo (). Если этого не произойдет, то ни один файл конфигурации php не может быть загружен (неправильное местоположение) extension_dir закомментирован или установлен в неправильное местоположение

1 голос
/ 08 ноября 2012

Я исправил эту проблему в своем Debian 6. Обычно я только что установил php5-common пакет. После установки вам необходимо перезапустить ваш веб-сервер (apache или nginx в зависимости от того, какой вы установили). Затем я просто делаю lsof для идентификатора процесса apache (lsof -p process_id) следующим образом:

sudo lsof -p 1399   #replace 1399 by your apache process id
apache2 1399 root  mem    REG  254,2    80352 227236 /usr/lib/php5/20090626/xmlrpc.so
apache2 1399 root  mem    REG  254,2   166496 227235 /usr/lib/php5/20090626/suhosin.so
apache2 1399 root  mem    REG  254,2    31120 227233 /usr/lib/php5/20090626/pdo_mysql.so
apache2 1399 root  mem    REG  254,2   100776 227216 /usr/lib/php5/20090626/pdo.so
apache2 1399 root  mem    REG  254,2   135864 227232 /usr/lib/php5/20090626/mysqli.so

Как вы можете видеть выше, модули устанавливаются по пути к файлу, неизвестному или управляемому путем общей библиотеки: / usr/lib/php5/20090626/. Для вашей установки он может отличаться, но только путь pdo_mysql.so, pdo.so, mysqli.so. Вот почему Drupal или любой другой движок php не может найти библиотеку и показывает эту ошибку: PDOException: could not find driver

Я просто не знаю, почему он установлен по такому странному пути, для меня это просто ошибка в скрипте установки пакета библиотеки в Debian 6. Я решил проблему, создав символическое значение для всех файлов в /usr/lib/php5/20090626/, чтобы /usr/lib/php5/ с помощью этой команды:

ln -s /usr/lib/php5/20090626/* /usr/lib/php5/

1 голос
/ 10 мая 2016

Я столкнулся с той же проблемой после удаления пакета php5 (включая все драйверы) для установки пакета php7. Я фактически установил пакет php7 без модуля mysql.

Мне удалось решить эту проблему, набрав в терминале:

1) $ apt-cache search php7 в котором перечислены все модули, просматривая найденные модули,

php7.0-mysql - модуль MySQL для PHP

2) $ sudo apt-get install php7.0-mysql

Вот и все. У меня это работало в моей системе Linux.

(используйте соответствующую версию php, у вас может быть php5)

1 голос
/ 29 мая 2019

Проверьте правильный путь в extension_dir в вашем phpinfo ().

...