Обработка ошибок при работе с БД

 

После долгого перерыва, наконец появилось время немного заняться сайтом.
В коментариях проскакивал вопрос про обработку ошибок при работе с базой данных в CodeIgniter.
В целом ситуация с данной темой в CI следующая:
Если при выполнении запроса к БД возникает ошибка, то вместо результата запроса будет возвращено значение FALSE.
Пример:

  1. $r = $this->db->get('nonexistanttablename');
  2. if($r === FALSE) {
  3. //Возникла ошибка, надо её обработать
  4. }

При этом нужно учитывать, что в файле конфигурации библиотеки доступа к БД (application/config/database.php) по умолчанию указано

  1. $db['default']['db_debug'] = TRUE;

(здесь вместо $db['default'] может быть другая группа параметров БД)

то вместо того, чтобы вернуть значение FALSE и продолжить работу приложения, библиотека доступа к БД прервет работу и выведет стандартную страницу с сообщением об ошибке и её описанием. На этапе разработки такое поведение вполне обосновано и даже необходимо, т.к. ленивый программист (а программист обязан быть ленивым) может забыть про обработку ошибок, что на этапе эксплуатации может привести к крайне неприятным последствиям.

Для того, чтобы отключить вывод страницы сообщения об ошибке, нужно в файле application/config/database.php указать :

  1. $db['default']['db_debug'] = FALSE;

В этом случае ответственность за обработку ошибок полностью ложиться на разработчика.
Чтобы получить номер ошибки, можно использовать функцию класса CI_DB_Driver _error_number(), для получения текста последней ошибки работы с БД можно использовать функцию класса CI_DB_Driver _error_message();
Пример:

  1. $r = $this->db->get('nonexistanttablename');
  2. if($r === FALSE) {
  3. //Возникла ошибка, обрабатываем
  4. $error_code = $this->db->_error_number();
  5. $error_message = $this->db->_error_message();
  6. // нужно принимать решение о том, что делать дальше - продолжать работу с учетом
  7. // ошибки или ошибка критическая и нужно прекратить выполнение кода
  8. }

На этапе эксплуатации параметр db_debug лучше отключать, т.к. в случае возникновения ошибок при работе с БД потенциальный злоумышленник может получить информацию о структуре вашей БД, и затем использовать в своих злодейских планах.

ошибку сделать

ошибку сделать можно элементарно, в запросе к базе меняешь одну букву или название таблицы и все :) вот и ошибка будет :)

1) Элементарно -

1) Элементарно - обращение к несуществующей таблице/полю по причине очепятки.
2) Не пробовали использовать в мышлении умеренность в плане критики, в общении - меньше сарказма - здоров помогает в жизни :)

Как нужно

Как нужно писать запросы так чтобы у тебя MySQL выдавал ошибку?
Я понимаю пока ты первый раз пишеш какой то запрос у тебя может вылететь ошибка, но уже при работе приложения.
Не пробовали проверять переменные прежде чем пихать их в запрос.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

  • Allowed HTML tags: <em> <b> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <h2> <h3> <h4> <table> <tr> <td> <th>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]". PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Подробнее о форматировании

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов

Вход в систему

Последние комментарии