Обработка ошибок при работе с БД
- Автор mityok on мая 10th, 2009
После долгого перерыва, наконец появилось время немного заняться сайтом.
В коментариях проскакивал вопрос про обработку ошибок при работе с базой данных в CodeIgniter.
В целом ситуация с данной темой в CI следующая:
Если при выполнении запроса к БД возникает ошибка, то вместо результата запроса будет возвращено значение FALSE.
Пример:
$r = $this->db->get('nonexistanttablename'); if($r === FALSE) { //Возникла ошибка, надо её обработать }
При этом нужно учитывать, что в файле конфигурации библиотеки доступа к БД (application/config/database.php) по умолчанию указано
$db['default']['db_debug'] = TRUE;
(здесь вместо $db['default'] может быть другая группа параметров БД)
то вместо того, чтобы вернуть значение FALSE и продолжить работу приложения, библиотека доступа к БД прервет работу и выведет стандартную страницу с сообщением об ошибке и её описанием. На этапе разработки такое поведение вполне обосновано и даже необходимо, т.к. ленивый программист (а программист обязан быть ленивым) может забыть про обработку ошибок, что на этапе эксплуатации может привести к крайне неприятным последствиям.
Для того, чтобы отключить вывод страницы сообщения об ошибке, нужно в файле application/config/database.php указать :
$db['default']['db_debug'] = FALSE;
В этом случае ответственность за обработку ошибок полностью ложиться на разработчика.
Чтобы получить номер ошибки, можно использовать функцию класса CI_DB_Driver _error_number(), для получения текста последней ошибки работы с БД можно использовать функцию класса CI_DB_Driver _error_message();
Пример:
$r = $this->db->get('nonexistanttablename'); if($r === FALSE) { //Возникла ошибка, обрабатываем $error_code = $this->db->_error_number(); $error_message = $this->db->_error_message(); // нужно принимать решение о том, что делать дальше - продолжать работу с учетом // ошибки или ошибка критическая и нужно прекратить выполнение кода }
На этапе эксплуатации параметр db_debug лучше отключать, т.к. в случае возникновения ошибок при работе с БД потенциальный злоумышленник может получить информацию о структуре вашей БД, и затем использовать в своих злодейских планах.

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