Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка ошибок (общее). Что где об этом почитать? (сложная тема) / 10 сообщений из 10, страница 1 из 1
05.04.2017, 00:42
    #39433224
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
Обработка ошибок в php (НЕ set_error_handler). Общее.
---

Как и где нужно проверять ошибки? <- вопрос не такой простой как кажется.

Абстрактный вопрос: Нужно ли делать проверки, так как в нижеследующем коде?
Код: php
1.
2.
3.
4.
5.
 if ($a = $b){     //операция ПРИСВОЕНИЯ
 //что-то делать
 }else{
 //делать что-то другое. например вывести сообщение об ошибке и прекратить выполнение скрипта
 }



Я догадываюсь что так никто никогда не делает, но это абстрактный пример. Далее написано более понятно.
---

Спрашиваю конкретно: При тестировании кода я вносил данные в бд руками (чтобы по вебинтерфейсу не тыкать мышкой) и случайно (или не случайно) ввел в бд данные которые нарушают целостность бд . Я ввел ИД пользователя которого никогда не было и нет в бд. Запрос вернул не правильные данные. Такая ошибка практически не возможна , но теоретически все возможно.

ВОПРОС: Как (и нужно ли) проверять ошибки которые практически невозможны?
---

И еще пример, который на 100% будет понятен всем. Если перед каждым запросом проверять существование таблицы и полей в ней ( ведь может быть так, что в бд не будет таблицы или некоторых полей в таблице )*, то из-за таких проверок код превратиться в мягко говоря "неуклюжий код".

*Да, такое вполне может быть, если таблицы создаются динамически. Тут проверки зависят от логики приложения.

А в единожды созданной бд, структура которой не будет изменятся во время работы приложения, такие проверки не нужны.

Вот в этом и вопрос: Как, в каких случаях, и когда нужно делать проверки неких данных и\или условий в коде? Что почитать об этом?

---

Про set_error_handler и исключения в др языках: У меня ввесь принцип обработки ошибок следующий: Если вызывается функция, то она или отработает хорошо или выведет сообщение об ошибке и сделает exit.

Код: php
1.
2.
3.
4.
//код
$ifrend = is_ifrend($param1);    //вернет ifrend или будет выход, если ошибка
add2frend($ifrend);
//код



Еще у меня set_error_handler пишет ошибки в отдельный лог-файл. Но не все ошибки ловит set_error_handler. Ниже об этом написал.

Ни set_error_handler, ни какие-то Exception в некоторых случаях не подходят. Почему? Ну какое исключение или ошибка в(set_error_handler) может быть передано\перехвачено, ЕСЛИ (например) запрос вернул 0 строк и данных для вывода нет. Это же как-бэ ошибка, но это нормальная ошибка (результат запроса который будет обработан соответствующим образом).
...
Рейтинг: 0 / 0
05.04.2017, 00:44
    #39433225
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
Обработка ошибок в php (НЕ set_error_handler). - это подзаголовок темы.
...
Рейтинг: 0 / 0
05.04.2017, 07:28
    #39433270
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
aliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности! А если можно ввести такие данные, то система правил контроля целостности (constraints) у тебя построена неправильно и ни хрена не контролирует. И исправлять это нужно именно на уровне структуры БД, а не размышлять, где и как отлавливать потом эту хрень на клиентском уровне.
...
Рейтинг: 0 / 0
05.04.2017, 08:01
    #39433276
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
Akinaaliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности!
Раньше была другая философия в PHP+MySql. Наверно это наследие тех времен. Зачатки NoSQL.

В MySql для таблиц MyISAM отсутствует поддержка внешних ключей и транзакций. За счет этого быстрее чтение. Раньше за это любили и использовали в связке PHP+MySql.
Если не путаю, нынче MyISAM заброшен разработчиками MySql и MariaDB как тупиковое направление развития, но поддерживается.

AkinaИ исправлять это нужно именно на уровне структуры БД, а не размышлять, где и как отлавливать потом эту хрень на клиентском уровне.
+1
...
Рейтинг: 0 / 0
05.04.2017, 08:11
    #39433279
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
Dima TРаньше была другая философия в PHP+MySql.

В MySql для таблиц MyISAM отсутствует поддержка внешних ключей и транзакций.
Тогда нельзя говорить о нарушении целостности БД. Несоответствие данных в БД бизнес-процессу - да, но не более.

Но эта проблема легко решается тотальным запретом прямого доступа к данным и реализацией всей логики работы с данными БД в формате хранимых процедур, где и реализуется логика контроля целостности и непротиворечивости.
...
Рейтинг: 0 / 0
05.04.2017, 08:26
    #39433281
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
AkinaНо эта проблема легко решается тотальным запретом прямого доступа к данным и реализацией всей логики работы с данными БД в формате хранимых процедур, где и реализуется логика контроля целостности и непротиворечивости.
Хранимых процедур там тоже не было. Да и толку от них, если транзакций нет. Было все примитивно: чтобы что-то записать блокируется таблица. Один insert - одна блокировка. MyISAM если интересно.

Повторюсь, это уже история, разработчики СУБД отказались от развития этого направления.
...
Рейтинг: 0 / 0
05.04.2017, 17:13
    #39433663
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
Akina,

авторПрочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные,

можно так сделать. Потому что у меня таблицы InnoDB БЕЗ ключей.
...
Рейтинг: 0 / 0
05.04.2017, 17:17
    #39433668
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
в принципе я уже понял. Нужно настроить бд.

Раньше оно у меня было в MyISAM. я перевел в InnoDB, но ключи не задал.
...
Рейтинг: 0 / 0
05.04.2017, 18:14
    #39433708
aliskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
что с бд делать - понятно. А с другими ошибками (то есть с обработкой) как бять?

Ну то понятно что мне как архитектору приложения нужно самому об этом заботиться, но как правильно, по научному это делать?

Ведь можно (см ВТОРОЙ пример вначале) вместо правильного значения $ifrend вернуть fakse и в месте вызова этой функции обрабатывать ошибку. А можно делать так как я делаю - или функц отработает хорошо ИЛИ в ней скрипт завершиться с выводом сообщения об ошибке.

Недаюсь вы меня поняли.
...
Рейтинг: 0 / 0
05.04.2017, 18:20
    #39433711
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
aliskinА с другими ошибками (то есть с обработкой) как быть?
ИМХО Это надо в профильном форуме спрашивать. В каждом ЯП свои средства по данному вопросу.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка ошибок (общее). Что где об этом почитать? (сложная тема) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]