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"
у меня была та же проблема. Решение зависит от ОС. В моем случае у меня есть 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.iniuncomment the line : extension=php_pdo_mysql.dll
-
затем перезапустите apache:
service apache2 restart
это решает мою проблему
вы проверили свой 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.
после того, как я попробовал большинство решений на этом посту я сделал следующее:
выключено PhpBrew
выполнена
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