Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Вам нужен модуль pdo_mysql. Ищите следующие в phpinfo (),
pdo_mysql
PDO Driver for MySQL, client library version => 5.1.44
Для тех, кто использует 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 с php-cli, и он работал нормально.
Только когда я попытался подключиться из apache, у меня возникла проблема с отсутствующим драйвером, t вполне понимаю.
Простая apt-get install php-mysql
решила его. (Ubuntu 16.04 / PHP7. Кредиты идут к выбранному ответу и комментарию Ивана)
Надеюсь, что это может помочь.
Для Linux Mint
У меня была такая же проблема при использовании PhpBrew (5.5.9 / 7.0.14) и попытка создать соединение PDO.
После того, как я попробовал больше всего из решений на этом посту я сделал следующее:
sudo apt-get install php7.0
(Linux Mint 17.2 / PHP7.0.16) - установлена новая версия php В моем случае моя строка DSN была неправильной, в частности, она не содержала mysql://.
, я бы ожидал другого сообщения об ошибке, возможно, что-то вроде строки DSN не указывает драйвер / протокол. '
Добавление mysql://
в начало строки DSN разрешило проблему.
Вы проверили свой php.ini (проверьте правильность расположения с помощью phpinfo ()), если MySQL и драйвер установлены правильно?
У меня была такая же проблема. Решение зависит от ОС. В моем случае у меня есть debian, поэтому для его решения:
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
service apache2 restart
Это решает мою проблему
На Ubuntu просто выполните
sudo apt-get install php5-mysql
для Windows 8.1 / 10 в файле \\ php.ini вы должны раскомментировать строку «extension = pdo_mysql»
Если бы такая же проблема и просто фигурировала, веб-сайт работает под php MAMP, но когда вы вызываете команду, она запускает mac (если не изменен путь bash). у вас будет проблема, когда у mac нет этих расширений.
запустите php -i, чтобы узнать загруженные расширения и установите те, которые вы пропустили. или запустите '/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}', чтобы использовать
MAMP]У меня была такая же проблема во время тестовых тестов с отдельным php.ini. Мне пришлось добавить эти строки в свой собственный файл php.ini:
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
Примечание: точно в этом порядке
Для более новых версий Ubuntu с PHP 7.0 вы можете получить пакет php-mysql
:
sudo apt-get install php-mysql
Затем перезагрузите сервер:
sudo service apache2 restart
$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
Это сработало для меня.
В любом месте я читаю, что путь extension_dir
должен быть изменен с ext
на абсолютный путь. Это сработало для меня. Однако, пытаясь создать сервер ПК моего коллеги, я должен был дать значение ext
вместо того, чтобы устанавливать абсолютный путь.
Если вы установили абсолютный путь, и это расширение все еще не найден, и он пытается как с абсолютным путем, так и с ext
.
В вашем коде 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
Я провел последний день, пытаясь понять, почему я получил следующую ошибку. Я запускаю 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 комментируется или устанавливается в неправильное местоположение.
Проблема заключается в отсутствии библиотеки php для mysql. В CentOs я исправил его, запустив # yum install php-mysql
, а затем перезапустив apache с помощью # /bin/systemctl restart httpd.service
. Обратите внимание, что именование немного отличается от дистрибутивов, основанных на debian / ubuntu, php-> php5 и httpd-> apache2.
У меня было то же исключение при попытке использовать 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 поскольку они не искали конфиг в
blockquote>/etc/php5/mods-enabled
При добавлении их в ваш php.ini убедитесь, что ссылка php_pdo.dll является первой, прежде чем dll-драйверы dll в противном случае это также вызовет это сообщение об ошибке. Добавьте их так:
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
sudo apt-get install php-mysql
хорошо работал на ubuntu и php 7
Я очень рекомендую mysqllnd
вместо mysql
из-за того, что у вас будет много проблем, таких как преобразование числа и тип бит, проблема с расширением mysql
.
на установке ubuntu mysqllnd
со следующей командой:
sudo apt-get install php5-mysqlnd
Я решил эту проблему, включив php_pdo_mysql.dll в «Информационная служба IIS -> Расширение PHP».
Я столкнулся с такой же проблемой после того, как я удалил пакет 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)
Для 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
.
Обновить : более новые версии должны использовать пакет 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 line (в моем случае, на моем сервере Ubuntu), вам просто нужно запустить строки выше, и тогда вам будет хорошо идти.
Просто еще одна вещь, чтобы подтвердить, что некоторые люди копируют / вставляют пример кода из Интернета, чтобы начать. Убедитесь, что вы здесь MySQL:
... $dbh = new PDO ("mysql: ...
В некоторых примерах это показывает
$dbh = new PDO ("dblib ...
Если вы используете 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
Я исправил эту проблему на моем 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/