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?

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

30 ответов


вам нужен модуль с именем 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), вам просто нужно запустить строки выше, и тогда вам будет хорошо идти.


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

sudo apt-get install php-mysql

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

sudo service apache2 restart

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

extension_dir = "c:\php5\ext"


на 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 драйверов БД в противном случае это также вызовет это сообщение об ошибке тоже. Добавьте их следующим образом:

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

на PHP 5.5 on CentOS я исправил это путем установки .

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

для справки по установке напишите комментарий, поскольку это зависит от способа установки PHP в вашей системе. Доступные РЕПО являются webtatic и remi.


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


проверьте, правильно ли установлен 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 из-за вас будет много проблем, таких как преобразование чисел и тип бит оценивает проблему с


я исправил эту проблему на моем 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.Итак, pdo.Итак, mysqli.Итак. Итак, вот почему 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/


$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 - поиск кэша php7 в котором перечислены все модули, просматривая модули, которые я нашел,

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

2) $ sudo apt-get install php7.0-в MySQL


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

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

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

$dbh = new PDO ("dblib ...

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

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

обратите внимание: именно в таком порядке


в моем случае я использовал 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 символические ссылки (в /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


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

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


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

если вы поставили абсолютный путь, и он делает расширение все еще не найден, considerer пытается как с абсолютным путем, так и ext.


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

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

сценарий

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

я создал на public папка и запустите phpinfo() искать местоположение моего .

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


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

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