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 Server).

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

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

30 227

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 string не указывает драйвер/протокол.-

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

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

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

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

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

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

$dbh = new PDO ("dblib ...

У меня была такая же проблема во время выполнения тестов с отдельным php.Ини. Мне пришлось добавить эти строки в мой собственный 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 in: \ \ php.ini файл вы должны раскомментировать строку "extension=pdo_mysql"

у меня было такое же исключение при попытке использовать pdo_sqlite. Проблема была в том, что автоматически созданный 20-pdo_sqlite.ini и 20-sqlite3.ini символические ссылки (in /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.Ини местоположение = c:\xampp\php\php.ini

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

запустите php-i, чтобы узнать загруженные расширения и установить те, которые вы пропустили. или запустить '/применения/MAMP/Бен/РНР/рнр5.3.6/Бен/РНР ремесленник {команда}' использовать МАМП это