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 ответов:
вам нужен модуль под названием 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
onCentOS
я исправил это путем установки .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
у меня было такое же исключение при попытке использовать
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.
после того, как я попробовал большинство решений на этом посту я сделал следующее:
питание от 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.Ини местоположение =
c:\xampp\php\php.ini
имел ту же проблему и просто понял, что веб-сайт работает под php MAMP, но когда вы вызываете команду, он запускает mac(если не изменен путь bash). у вас будет проблема, когда mac не имеет этих расширений.
запустите php-i, чтобы узнать загруженные расширения и установить те, которые вы пропустили. или запустить '/применения/MAMP/Бен/РНР/рнр5.3.6/Бен/РНР ремесленник {команда}' использовать МАМП это