Поэтому я настраиваю установщик для своего веб-приложения и имею поля ввода для учетных данных базы данных. Часть моего процесса проверки включает тестирование соединения с базой данных (с использованием PHP-библиотеки PDO). Если соединение терпит неудачу, я хочу иметь возможность различать неправильный пароль, неправильный адрес, несуществующее имя базы данных и т. Д., Поэтому я могу ссылаться на правильное поле ввода в форме.
Может ли кто-нибудь указать мне ссылку, которая описывает возможные коды ошибок / сообщения, которые возвращаются с помощью исключения PDOException?
Edit: Мне пришло в голову, что эти коды ошибок / сообщения, вероятно, зависят от базы данных, а собственные коды / ошибки базы данных могут просто пройти. Если это так, я в настоящее время работаю только с базами данных MySQL 5.
Документация 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
) Сообщение: не CR_CONN_HOST_ERROR
подключиться к серверу MySQL на «% s» (% d)
Я не буду перечислять все возможные ошибки, потому что они уже задокументированы, и я не знаю, какие из них вам нужно обрабатывать. Например, ошибки 2001 и 2002 года специфичны для соединений сокетов UNIX, которые могут быть неактуальны для вашей целевой платформы.
Не забудьте использовать PDO::errorCode()
и PDO::errorInfo()
вместо простого сообщения PDOException
.
Повторите свой комментарий о getCode()
– Нет, похоже, что это не поддерживается. Я сделал быстрый тест, чтобы var_dump()
PDOException
. К сожалению, его код прост «0», хотя код ошибки и SQLSTATE включены в сообщение об исключении.
Исключение :: getCode () является частью базового класса Exception, начиная с PHP версии 5.1.0. Для использования этого поля объекта зависит от реализации соответствующего драйвера PDO. По крайней мере, для драйвера MySQL они, по-видимому, этого не сделали.
Я не уверен в PDO, но вы можете использовать mysql_error()
которая возвращает что-то вроде этого:
- Доступ запрещен для пользователя youruser @ yourserver
- Не удалось выбрать базу данных
- …и т.д
Затем вы можете отобразить эти ошибки непосредственно пользователю или поиграть, чтобы получить список всех возможных ошибок, и определить причину ошибки напрямую.