PDOException "не удалось найти драйвер"

Я только что установил 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).

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

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

У вас должен быть модуль pdo_mysql. Ищете следующее в phpinfo (),

 pdo_mysql PDO Driver for MySQL, client library version => 5.1.44 

В вашем коде dsn показано, что вы пытаетесь подключиться к драйверу mysql. Ваше сообщение об ошибке указывает, что этот драйвер недоступен.

Убедитесь, что на вашем сервере установлено расширение mysql.

В Ubuntu / Debian вы проверяете пакет:

 dpkg --get-selections | grep php | grep mysql 

Установите пакет php5-mysql, если у вас его нет.

В Ubuntu / Debian вы можете использовать:

  • PHP5: sudo apt-get install php5-mysql
  • PHP7: sudo apt-get install php7.0-mysql

Наконец, чтобы заставить его работать, вам необходимо перезапустить веб-сервер:

  • Apache: sudo /etc/init.d/apache2 restart
  • Nginx: sudo /etc/init.d/nginx restart

Обновление : более новые версии должны использовать пакет php-sqlite3 вместо php5-sqlite . Поэтому используйте это, если используете последнюю версию ubuntu:

 sudo apt-get install sqlite php-sqlite3 

Оригинальный ответ на вопрос:

 sudo apt-get install sqlite php5-sqlite sudo /etc/init.d/apache2 restart 

Если ваш phpinfo () не показывает строку pdo_sqlite (в моем случае, на моем сервере Ubuntu), вам просто нужно запустить строки выше, и тогда вам будет хорошо идти.

На моей машине с Windows я должен был дать абсолютный путь к расширению dir в моем php.ini:

extension_dir = "c:\php5\ext"

Для более новых версий Ubuntu с PHP 7.0 вы можете получить пакет php-mysql :

 sudo apt-get install php-mysql 

Затем перезапустите сервер:

 sudo service apache2 restart 

На Ubuntu просто выполните

 sudo apt-get install php5-mysql 

Я была такая же проблема. Решение зависит от ОС. В моем случае у меня есть debian, поэтому для его решения:

  • обновил мою версию php от php5 до php7 ( введите описание ссылки здесь )
  • установить php-mysql и php7.0-mysql

     apt-get install php-mysql apt-get install php7.0-mysql 
  • Я отредактировал свою локализацию php.ini по адресу /etc/php/7.0/apache2/php.ini

     uncomment the line : extension=php_pdo_mysql.dll 
  • затем перезапустите apache:

     service apache2 restart 

Это решает мою проблему

 sudo apt-get install php-mysql 

хорошо работал на ubuntu и php 7

Вы проверили ваш php.ini (проверьте правильность местоположения с помощью phpinfo ()), если MySQL и драйвер установлены правильно?

При добавлении их в ваш php.ini убедитесь, что ссылка php_pdo.dll является первой до dll-драйверов db, иначе это также вызовет это сообщение об ошибке. Добавьте их так:

 [PHP_PDO] extension=php_pdo.dll [PHP_PDO_MYSQL] extension=php_pdo_mysql.dll 

Для 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 .

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

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

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

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

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

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

 sudo apt-get install php5-mysqlnd 

Я провел последний день, пытаясь понять, почему я получил следующую ошибку. Я запускаю 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, поскольку он не поставляется с ним по умолчанию.

Я исправил эту проблему на своем 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/ to /usr/lib/php5/ с помощью этой команды:

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

 $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 

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

Я столкнулся с такой же проблемой после того, как я удалил пакет 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)

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

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

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

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

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

 doctrine: dbal: mapping_types: set: string 

Этот «mapping_types» должен быть размещен на этом уровне:

 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

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

У меня было такое же исключение при попытке использовать pdo_sqlite . Проблема заключалась в том, что автоматически созданные 20-pdo_sqlite.ini и 20-sqlite3.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

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

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

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

 $dbh = new PDO ("dblib ... 

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

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

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

Если вы используете sqlite для тестирования, вам понадобится диск php sqlite pdo. Вы можете установить их, как показано ниже.

Для Ubuntu 14.04

 sudo apt-get install php5-sqlite sudo service apache2 restart 

В Ubuntu 16.04 нет php5-sqlite

 sudo apt-get install php7.0-sqlite sudo service apache2 restart 

Для Linux Mint

У меня была такая же проблема при использовании PhpBrew (5.5.9 / 7.0.14) и попытка создать PDO-соединение.

После того как я попробовал большинство решений на этом посту, я сделал следующее:

  1. Работает на PhpBrew

  2. Выполнен sudo apt-get install php7.0 (Linux Mint 17.2 / PHP7.0.16) – установлена ​​новая версия php

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

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

Я решил эту проблему, включив php_pdo_mysql.ddl в «Информационная служба IIS -> PHP Exstention».

Удалите точку с запятой до : extension = php_pdo_mysql.dll в php.ini и сохраните. Не забудьте перезапустить xampp Apache и Mysql.