Intereting Posts
PHP MYSQL Выберите почтовый индекс OR customerid ИЛИ anyelse Почему $ _SERVER и $ _SERVER не установлены? Как отображать динамический контент из удаленного файла в bootstrap modal с помощью php? Как получить значения выбора из нескольких строк в php удалить * из таблицы не работает Как шифровать строку в PHP? Ошибка SMTP: не удалось подключиться к серверу: время ожидания подключения (110) с помощью PHPMailer и Outlook SMTP Фундаментальное непонимание модели в «Красноречии» (за пределами Laravel) QuickBlox REST API Неожиданная подпись на Laravel PHP Циклические данные, когда форма имеет разные атрибуты имени каждой строки Конфигурации динамических маршрутов CakePHP, возможно ли это? или просто МЕЧТА? используя AJAX и JQuery для создания pdf с использованием FPDF Вывести строку запроса в массив Как переназначить столбец AUTO_INCREMENT для каждой строки в таблице MySQL с помощью PHP Глобальные переменные и локальные переменные

Возможные ошибки PDOException (MySQL 5)?

Поэтому я настраиваю установщик для своего веб-приложения и имею поля ввода для учетных данных базы данных. Часть моего процесса проверки включает тестирование соединения с базой данных (с использованием 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
  • Не удалось выбрать базу данных
  • …и т.д

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