2009-04-13 2 views
9

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

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

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

ответ

14

Документация MySQL является полной ссылкой для error codes.

Код ошибки, начинающийся с 1000, составляет server errors. К ним относятся ошибки как:

  • Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Сообщение: Доступ запрещен для пользователя '% S' @ '% s' (с помощью пароля:% S)

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

коды ошибок, начиная с 2000 года являются client errors. К ним относятся ошибки как:

  • Ошибка: 2005 (CR_UNKNOWN_HOST) Сообщение: Unknown MySQL хост-сервера '% s' (% d)

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

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

+2

Does PDOException :: getCode() возвращает тот же код, что и PDO :: errorCode()? – Wilco

+0

Согласно http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code, метод 'PDO-> getCode()' должен возвращать код ошибки SQLSTATE. –

-7

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

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

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

Смежные вопросы