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

 

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

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

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

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

CAPTCHA
Этот вопрос предназначен для того, чтобы отсеять ботов
4 + 4 =
Решите простой математический пример и введите результат. К примеру, для вопроса 1+3 нужно ввести 4

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

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