Я только что установил 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?
Поиск в Интернете не помог, все, что я получаю, это обмен экспертами и примеры, но никаких решений.
У вас должен быть модуль 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 вы можете использовать:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Наконец, чтобы заставить его работать, вам необходимо перезапустить веб-сервер:
sudo /etc/init.d/apache2 restart
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), вам просто нужно запустить строки выше, и тогда вам будет хорошо идти.
На моей машине с Windows я должен был дать абсолютный путь к расширению dir в моем php.ini:
extension_dir = "c:\php5\ext"
Для более новых версий Ubuntu с PHP 7.0 вы можете получить пакет php-mysql
:
sudo apt-get install php-mysql
Затем перезапустите сервер:
sudo service apache2 restart
На Ubuntu просто выполните
sudo apt-get install php5-mysql
Я была такая же проблема. Решение зависит от ОС. В моем случае у меня есть debian, поэтому для его решения:
установить 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-драйверов db, иначе это также вызовет это сообщение об ошибке. Добавьте их так:
[PHP_PDO] extension=php_pdo.dll [PHP_PDO_MYSQL] extension=php_pdo_mysql.dll
Для 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
.
Проверьте правильность установки 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
из-за того, что у вас будет много проблем, таких как преобразование числа и тип бит, и проблема с расширением mysql
.
на ubuntu установите mysqllnd
с помощью следующей команды:
sudo apt-get install php5-mysqlnd
Я провел последний день, пытаясь понять, почему я получил следующую ошибку. Я запускаю 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, поскольку он не поставляется с ним по умолчанию.
Я исправил эту проблему на своем 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-cache search php7, который перечисляет все модули, просматривая найденные модули,
php7.0-mysql – модуль MySQL для PHP
2) $ sudo apt-get install php7.0-mysql
Вот и все. Это работало для меня в моей Linux-системе.
(используйте соответствующую версию php, твой может быть php5)
В моем случае я использовал 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
символические 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
Просто еще одна вещь, чтобы подтвердить, что некоторые люди копируют / вставляют пример кода из Интернета, чтобы начать. Убедитесь, что вы ввели MySQL:
... $dbh = new PDO ("mysql: ...
В некоторых примерах это показывает
$dbh = new PDO ("dblib ...
У меня была та же проблема во время выполнения тестов с отдельным php.ini. Мне пришлось добавить эти строки в свой собственный файл php.ini:
[PHP] extension = mysqlnd.so extension = pdo.so extension = pdo_mysql.so
Примечание: именно в этом порядке
Если вы используете sqlite для тестирования, вам понадобится диск php sqlite pdo. Вы можете установить их, как показано ниже.
Для 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
Если бы такая же проблема и просто фигурировала, веб-сайт работает под php MAMP, но когда вы вызываете команду, она запускает mac (если ни один путь bash не изменен). у вас будет проблема, если у mac нет этих расширений.
запустите php -i, чтобы узнать загруженные расширения и установите те, которые вы пропустили. или запустите '/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}', чтобы использовать MAMP
Я решил эту проблему, включив php_pdo_mysql.ddl в «Информационная служба IIS -> PHP Exstention».
Удалите точку с запятой до : extension = php_pdo_mysql.dll в php.ini и сохраните. Не забудьте перезапустить xampp Apache и Mysql.