Возможные ошибки PDOException (MySQL 5)? - PullRequest
9 голосов
/ 13 апреля 2009

Итак, я устанавливаю установщик для моего веб-приложения и имею поля ввода для учетных данных базы данных. Часть моего процесса проверки включает в себя тестирование соединения с базой данных (с использованием PHP-библиотеки PDO). В случае сбоя соединения я хочу иметь возможность различать неверный пароль, неверный адрес, несуществующее имя базы данных и т. Д., Чтобы я мог ссылаться на соответствующее поле ввода в форме.

Может ли кто-нибудь указать мне ссылку, в которой указаны возможные коды ошибок / сообщения, которые возвращаются с PDOException?

Редактировать: Мне пришло в голову, что эти коды ошибок / сообщения, вероятно, специфичны для базы данных, и исходные коды / ошибки базы данных могут просто передаваться. Если это так, в настоящее время я работаю только с базами данных MySQL 5.

Ответы [ 2 ]

15 голосов
/ 13 апреля 2009

Документация MySQL является полным справочником для кодов ошибок .

Коды ошибок, начинающиеся с 1000: ошибки сервера . К ним относятся ошибки, такие как:

  • Ошибка: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Сообщение: доступ запрещен для пользователя "% s" @ "% s" (используется пароль:% s)

  • Ошибка: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) Сообщение: неизвестная база данных "% s"

Коды ошибок, начинающиеся с 2000: ошибки клиента . К ним относятся ошибки, такие как:

  • Ошибка: 2005 (CR_UNKNOWN_HOST) Сообщение: неизвестный хост сервера MySQL "% s" (% d)

  • Ошибка: 2003 (CR_CONN_HOST_ERROR) Сообщение: не удается подключиться к серверу MySQL на «% s» (% d)

Я не собираюсь перечислять все возможные ошибки, потому что они уже задокументированы, и я не знаю, какие из них вам нужно устранить. Например, ошибки 2001 и 2002 характерны для соединений сокетов UNIX, которые могут не иметь отношения к вашей целевой платформе.

Не забудьте использовать PDO::errorCode() и PDO::errorInfo() вместо простого сообщения PDOException.


Re Ваш комментарий о getCode() - Нет, похоже, это не поддерживается таким образом. Я сделал быстрый тест, чтобы var_dump() a PDOException. К сожалению, его код прост: «0», хотя код ошибки и SQLSTATE включены в сообщение об исключении.

Exception :: getCode () является частью базового Exception класса, начиная с PHP версии 5.1.0. Это зависит от реализации соответствующего драйвера PDO, чтобы использовать это поле объекта. По крайней мере, для драйвера MySQL они, очевидно, не сделали.

0 голосов
/ 13 апреля 2009

Я не уверен насчет PDO, но вы можете использовать функцию mysql_error(), которая возвращает что-то вроде этого:

  • Доступ запрещен для пользователя youruser @ ваш сервер
  • Невозможно выбрать базу данных
  • ... и т.д.

Затем вы можете отобразить эти ошибки непосредственно для пользователя или поиграть, чтобы получить список всех возможных ошибок и непосредственно определить причину ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...