Неустранимая ошибка, возникающая, когда я пытаюсь подключиться к базе данных с [duplicate]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

224
задан ghbarratt 10 November 2011 в 07:47
поделиться

29 ответов

Вам нужен модуль pdo_mysql. Ищите следующие в phpinfo (),

pdo_mysql

PDO Driver for MySQL, client library version => 5.1.44
184
ответ дан ZZ Coder 1 September 2018 в 02:17
поделиться

Для тех, кто использует 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

1
ответ дан aneth101 1 September 2018 в 02:17
поделиться

В моем случае я использовал PDO с php-cli, и он работал нормально.

Только когда я попытался подключиться из apache, у меня возникла проблема с отсутствующим драйвером, t вполне понимаю.

Простая apt-get install php-mysql решила его. (Ubuntu 16.04 / PHP7. Кредиты идут к выбранному ответу и комментарию Ивана)

Надеюсь, что это может помочь.

1
ответ дан Balmipour 1 September 2018 в 02:17
поделиться

Для Linux Mint

У меня была такая же проблема при использовании PhpBrew (5.5.9 / 7.0.14) и попытка создать соединение PDO.

После того, как я попробовал больше всего из решений на этом посту я сделал следующее:

  1. Powered off PhpBrew
  2. Выполнено sudo apt-get install php7.0 (Linux Mint 17.2 / PHP7.0.16) - установлена ​​новая версия php
0
ответ дан Bugs 1 September 2018 в 02:17
поделиться

В моем случае моя строка DSN была неправильной, в частности, она не содержала mysql://., я бы ожидал другого сообщения об ошибке, возможно, что-то вроде строки DSN не указывает драйвер / протокол. '

Добавление mysql:// в начало строки DSN разрешило проблему.

2
ответ дан cale_b 1 September 2018 в 02:17
поделиться

Вы проверили свой php.ini (проверьте правильность расположения с помощью phpinfo ()), если MySQL и драйвер установлены правильно?

5
ответ дан cem 1 September 2018 в 02:17
поделиться

У меня была такая же проблема. Решение зависит от ОС. В моем случае у меня есть 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.ini
    uncomment the line : extension=php_pdo_mysql.dll
    
  • Затем перезапустите apache :
    service apache2 restart
    

Это решает мою проблему

12
ответ дан Community 1 September 2018 в 02:17
поделиться

На Ubuntu просто выполните

sudo apt-get install php5-mysql
14
ответ дан Dmitry Sobolev 1 September 2018 в 02:17
поделиться

для Windows 8.1 / 10 в файле \\ php.ini вы должны раскомментировать строку «extension = pdo_mysql»

1
ответ дан Egor Doynikov 1 September 2018 в 02:17
поделиться

Если бы такая же проблема и просто фигурировала, веб-сайт работает под php MAMP, но когда вы вызываете команду, она запускает mac (если не изменен путь bash). у вас будет проблема, когда у mac нет этих расширений.

запустите php -i, чтобы узнать загруженные расширения и установите те, которые вы пропустили. или запустите '/Applications/MAMP/bin/php/php5.3.6/bin/php artisan {your command}', чтобы использовать

MAMP]
-2
ответ дан Entrust 1 September 2018 в 02:17
поделиться

У меня была такая же проблема во время тестовых тестов с отдельным php.ini. Мне пришлось добавить эти строки в свой собственный файл php.ini:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

Примечание: точно в этом порядке

1
ответ дан Facedown 1 September 2018 в 02:17
поделиться

Для более новых версий Ubuntu с PHP 7.0 вы можете получить пакет php-mysql:

sudo apt-get install php-mysql

Затем перезагрузите сервер:

sudo service apache2 restart
20
ответ дан FinkAvenue 1 September 2018 в 02:17
поделиться
$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

Это сработало для меня.

20
ответ дан fvrghl 1 September 2018 в 02:17
поделиться

В любом месте я читаю, что путь extension_dir должен быть изменен с ext на абсолютный путь. Это сработало для меня. Однако, пытаясь создать сервер ПК моего коллеги, я должен был дать значение ext вместо того, чтобы устанавливать абсолютный путь.

Если вы установили абсолютный путь, и это расширение все еще не найден, и он пытается как с абсолютным путем, так и с ext.

0
ответ дан gentil papillon 1 September 2018 в 02:17
поделиться

В вашем коде 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
167
ответ дан ghbarratt 1 September 2018 в 02:17
поделиться

Я провел последний день, пытаясь понять, почему я получил следующую ошибку. Я запускаю 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, поскольку он не поставляется с ним по умолчанию.

3
ответ дан Growling Flea 1 September 2018 в 02:17
поделиться

Проверьте правильность установки extension_dir в файле конфигурации php. Попробуйте прокомментировать / раскомментировать некоторые расширения и посмотреть, отражено ли это на phpinfo (). Если это не так, либо файл конфигурации php не может быть загружен (неправильное местоположение). Extension_dir комментируется или устанавливается в неправильное местоположение.

2
ответ дан hserge 1 September 2018 в 02:17
поделиться

Проблема заключается в отсутствии библиотеки php для mysql. В CentOs я исправил его, запустив # yum install php-mysql, а затем перезапустив apache с помощью # /bin/systemctl restart httpd.service. Обратите внимание, что именование немного отличается от дистрибутивов, основанных на debian / ubuntu, php-> php5 и httpd-> apache2.

2
ответ дан Japheth Ongeri - inkalimeva 1 September 2018 в 02:17
поделиться

У меня было то же исключение при попытке использовать 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

0
ответ дан loostro 1 September 2018 в 02:17
поделиться

При добавлении их в ваш php.ini убедитесь, что ссылка php_pdo.dll является первой, прежде чем dll-драйверы dll в противном случае это также вызовет это сообщение об ошибке. Добавьте их так:

[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
5
ответ дан Luís Cruz 1 September 2018 в 02:17
поделиться
sudo apt-get install php-mysql 

хорошо работал на ubuntu и php 7

8
ответ дан Moses Nandwa 1 September 2018 в 02:17
поделиться

Я очень рекомендую mysqllnd вместо mysql из-за того, что у вас будет много проблем, таких как преобразование числа и тип бит, проблема с расширением mysql.

на установке ubuntu mysqllnd со следующей командой:

sudo apt-get install php5-mysqlnd
2
ответ дан MSS 1 September 2018 в 02:17
поделиться

Я решил эту проблему, включив php_pdo_mysql.dll в «Информационная служба IIS -> Расширение PHP».

-2
ответ дан Riccardo Compagnone 1 September 2018 в 02:17
поделиться

Я столкнулся с такой же проблемой после того, как я удалил пакет 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)

1
ответ дан Roshimon 1 September 2018 в 02:17
поделиться

Для 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.

4
ответ дан SimonW 1 September 2018 в 02:17
поделиться

Обновить : более новые версии должны использовать пакет 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), вам просто нужно запустить строки выше, и тогда вам будет хорошо идти.

66
ответ дан Sudipta Chatterjee 1 September 2018 в 02:17
поделиться

Просто еще одна вещь, чтобы подтвердить, что некоторые люди копируют / вставляют пример кода из Интернета, чтобы начать. Убедитесь, что вы здесь MySQL:

... $dbh = new PDO ("mysql: ...  

В некоторых примерах это показывает

$dbh = new PDO ("dblib ...
0
ответ дан user8 1 September 2018 в 02:17
поделиться

Если вы используете 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
0
ответ дан Web Developer in Pune 1 September 2018 в 02:17
поделиться

Я исправил эту проблему на моем 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/

20
ответ дан fvrghl 1 September 2018 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: