Я только что установил 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?
Поиск в интернете не помог, все, что я получаю, это обмен экспертами и примеры, но никаких решений.
php.ini' file and uncomment
расширении = php_pdo_mysql.dll. The path to your
php.ini` файл можно найти, посмотрев на ваш phpinfo ().extension=msql.so
и все работает!docker exec
войти в контейнер и запуститьdocker-php-ext-install pdo pdo_mysql
.Ответы:
Вам нужен модуль с именем pdo_mysql. Ищете следующий в phpinfo (),
источник
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
DSN в вашем коде показывает, что вы пытаетесь соединиться с драйвером mysql. Ваше сообщение об ошибке указывает на то, что этот драйвер недоступен.
Убедитесь, что на вашем сервере установлено расширение mysql.
В Ubuntu / Debian вы проверяете пакет с помощью:
Установите пакет 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:Оригинальный ответ на вопрос здесь:
Если ваш phpinfo () не показывает строку pdo_sqlite (в моем случае, на моем сервере Ubuntu), вам просто нужно запустить строки выше, и тогда вы будете в порядке.
источник
pdo_sqlite
и не устанавливаете,php5-sqlite
вы получаете толькоPDOException
без информации об отсутствующем sqlite и попробуйте установитьphp5-mysql
дважды.Для более новых версий Ubuntu с PHP 7.0 вы можете получить
php-mysql
пакет:Затем перезапустите ваш сервер:
источник
Я была такая же проблема. Решение зависит от ОС. В моем случае у меня есть Debian, поэтому для его решения:
Установите php-mysql и php7.0-mysql
Я
php.ini
изменил свое местоположение в /etc/php/7.0/apache2/php.iniЗатем перезапустите Apache:
Это решает мою проблему
источник
a2dismod php5
,a2enmod php7.0
и ,service apache2 restart
наконец , получил меня обратно и работает.На моей машине с Windows мне нужно было указать абсолютный путь к каталогу расширений в моем php.ini:
extension_dir = "c:\php5\ext"
источник
extension_dir = "ext"
, но не с этим.На Ubuntu просто выполнить
источник
sudo apt-get install php5-pgsql
хорошо работал на Ubuntu и PHP 7
источник
Проверьте, доступен ли модуль с
php -m | grep pdo_mysql
.Если нет, для PHP 7.2 вы можете установить соответствующий пакет с
sudo apt install php7.2-mysql
.Используйте аналогичную команду в других версиях PHP и менеджерах пакетов.
источник
При добавлении их в ваш php.ini убедитесь, что ссылка php_pdo.dll находится перед тем, как dll драйверы dll, иначе это также вызовет это сообщение об ошибке. Добавьте их так:
источник
php_pdo.dll
модуль больше не требуется (не существует). php.net/manual/en/pdo.installation.php , вероятно, является окончательным ответом на этот вопрос.Вы проверяли свой php.ini (проверьте правильность расположения с помощью phpinfo ()), если MySQL и драйвер установлены правильно?
источник
[MySQL]
Для
PHP 5.5
наCentOS
я это исправил, установивphp55-mysqlnd
пакет.Чтобы получить помощь в установке, напишите комментарий, так как это зависит от того, как PHP установлен в вашей системе. Доступные репо есть
webtatic
иremi
.источник
для Windows 8.1 / 10 в файле: \\ php.ini вы должны раскомментировать строку "extension = pdo_mysql"
источник
В моем случае моя строка DSN была неправильной, в частности, она не содержала,
mysql://.
я ожидал другое сообщение об ошибке, возможно, что-то вроде «DSN строка не указывает драйвер / протокол».Добавление
mysql://
в начало строки DSN решило проблему.источник
Я провел последний день, пытаясь выяснить, почему я получаю следующую ошибку. Я использую Ubuntu 14.04.
Проблема:
я заметил, что моя версия PHP-CLI работала с php7.0, но php_info () (веб-версия) отображала php 5.5.9. Хотя php_info () говорит, что pdo был включен, использование командной строки (CLI) не распознало команду pdo_mysql. Оказывается, mysql был включен для моей старой версии, но не для версии CLI. Все, что я сделал, это установил mysql для php7.0, и он смог работать.
Вот что сработало:
Чтобы проверить версию:
Установить MySQL для php7.0
1) убедитесь, что ваша версия CLI совпадает с вашей веб-версией
2) Если они отличаются, убедитесь, что ваша версия CLI имеет подключаемый модуль mysql, поскольку он не поставляется с ним по умолчанию.
источник
Проверьте, правильно ли установлен extension_dir в файле конфигурации php. Попробуйте прокомментировать / раскомментировать некоторые расширения и посмотреть, отражено ли это в phpinfo (). Если этого не произойдет, то ни один из файлов конфигурации php не может быть загружен (неправильное местоположение) extension_dir закомментировано или установлено в неправильное местоположение.
источник
Проблема в отсутствии библиотеки php to mysql. В CentOs я исправил это, запустив,
# yum install php-mysql
а затем перезапустив apache с помощью# /bin/systemctl restart httpd.service
Обратите внимание, что наименование немного отличается от дистрибутивов на основе Debian / Ubuntu, php-> php5 и httpd-> apache2.источник
У меня была такая же проблема при запуске тестов с отдельным php.ini. Мне пришлось добавить эти строки в мой собственный файл php.ini:
Обратите внимание: именно в этом порядке
источник
Я настоятельно рекомендую
mysqllnd
вместо этого,mysql
потому что у вас было бы много проблем, таких как преобразование чисел, и битовый тип оценивает проблему сmysql
расширением.на Ubuntu установить
mysqllnd
с помощью следующей команды:источник
Я исправил эту проблему на своем Debian 6. Обычно я только что установил
php5-common
пакет. После установки вам необходимо перезапустить ваш веб-сервер (apache или nginx в зависимости от того, какой вы установили). Затем я просто делаюlsof
в apache процесс id (lsof -p process_id
) следующим образом:Как вы можете видеть выше, модули устанавливаются по пути к файлу, который не известен или определяется общим путем к библиотеке: /
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/
источник
Это сработало для меня.
источник
Я столкнулся с той же проблемой после удаления пакета php5 (который включает в себя также все драйверы) для установки пакета php7. Я фактически установил пакет php7 без модуля mysql.
Мне удалось решить это, набрав в терминале:
1) $ apt-cache search php7, в котором перечислены все модули, просматривая найденные модули,
php7.0-mysql - модуль MySQL для PHP
2) $ sudo apt-get установить php7.0-mysql
Вот и все. У меня это работало в моей системе Linux.
(используйте соответствующую версию php, ваша может быть php5)
источник
Еще одна вещь, которую нужно подтвердить, поскольку некоторые люди для начала копируют / вставляют пример кода из Интернета. Убедитесь, что MySQL введен здесь:
В некоторых примерах это показывает
источник
В моем случае я использовал PDO с php-cli, и он работал нормально.
Только когда я попытался подключиться из apache, у меня возникла проблема с отсутствующим драйвером, которую я не совсем понял.
Простое
apt-get install php-mysql
решило это. (Ubuntu 16.04 / PHP7. Кредиты переходят к выбранному ответу и комментарию Ивана)Надеюсь, это поможет.
источник
Для тех, кто использует Symfony2 / 3 и интересуется, почему вы получаете эту ошибку. Если вы используете "mapping_types", вы можете столкнуться с этой ошибкой. Причина в том, что «mapping_types» находится на неправильном уровне. Например :
Эти "mapping_types" должны быть размещены на этом уровне:
надеюсь, это поможет
Я нашел решение здесь: https://github.com/doctrine/DoctrineBundle/issues/327
источник
Куда бы я ни пошел, я читаю, что путь
extension_dir
должен быть изменен сext
абсолютного пути. Это сработало для меня. Однако, когда я пытался построить сервер на компьютере моего коллеги, мне пришлось оставить значениеext
вместо того, чтобы указывать абсолютный путь.Если вы указали абсолютный путь, и он все еще не найден, попробуйте как абсолютный путь, так и
ext
.источник
Некорректная установка PHP
Я испытывал ту же проблему. И я надеюсь, что это поможет кому-то, кто сталкивается с такой же проблемой, как я.
сценарий
Я создал
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
.Решение
вместо звонка
который дал мне эту ошибку, я использовал
и это сработало.
источник
Проверьте правильный путь в extension_dir в вашем phpinfo ().
источник
Я боролся и боролся с "apt install php-mysql php7toInfinity и не забывай sqlite-what-ever's" и просто не мог избавиться от этого сообщения об ошибке, пока не вернулся к основам и не сбросил права доступа к файлам на веб-сайте. обсуждаемый.
Эти 3 команды сбрасывают права доступа к файлам и папкам на веб-сайте и заставляют его снова работать.
источник
У меня было то же исключение при попытке использовать
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
исправил проблему.
источник