it-roy-ru.com

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?

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

236
Mike Moore

Вам нужен модуль с именем pdo_mysql. Ищете следующий в phpinfo (),

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
199
ZZ Coder

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
174
ghbarratt

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

71
Sudipta Chatterjee

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

Sudo apt-get install php-mysql

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

Sudo service Apache2 restart
21
FinkAvenue

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

extension_dir = "c:\php5\ext"

21
berdzi

Я была такая же проблема. Решение зависит от ОС. В моем случае у меня есть 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
    

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

14
onlyme

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

Sudo apt-get install php5-mysql
14
Dmitry Sobolev
Sudo apt-get install php-mysql 

хорошо работал на Ubuntu и PHP 7

8
Moses Nandwa

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

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
5
Paul Foster

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

5
cem

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

4
SimonW

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

3
Egor Doynikov

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

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

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

Sudo apt-get install php5-mysqlnd
2
MSS

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

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

2
gposton

Проблема в том, что отсутствует библиотека php to mysql. В CentOs я исправил это, запустив # yum install php-mysql, а затем перезапустите Apache с помощью # /bin/systemctl restart httpd.service. Обратите внимание, что наименование немного отличается от дистрибутивов на основе debian/ubuntu, php-> php5 и httpd-> Apache2.

2
Japheth Ongeri - inkalimeva

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

2
hserge

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

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

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

$dbh = new PDO ("dblib ...
1
Joe

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

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

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

1
Facedown

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

1
Alexandr Nizhnik

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

Я исправил эту проблему на своем 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
douggynix

Для тех, кто использует 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

1
aneth101

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

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

1
papillon

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

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

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

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

1
Balmipour

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

0
Andrei .K

Если вы используете 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
0
Web Developer in Pune

У меня было то же исключение при попытке использовать 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
ioleo

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

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

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

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

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

0
JerzySBG

Вызывается неправильная установка 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

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

0
SollyM
$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
Persianuser