powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
10 сообщений из 10, страница 1 из 1
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
    #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
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
    #39433225
aliskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обработка ошибок в php (НЕ set_error_handler). - это подзаголовок темы.
...
Рейтинг: 0 / 0
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
    #39433270
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности! А если можно ввести такие данные, то система правил контроля целостности (constraints) у тебя построена неправильно и ни хрена не контролирует. И исправлять это нужно именно на уровне структуры БД, а не размышлять, где и как отлавливать потом эту хрень на клиентском уровне.
...
Рейтинг: 0 / 0
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
    #39433276
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaaliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности!
Раньше была другая философия в PHP+MySql. Наверно это наследие тех времен. Зачатки NoSQL.

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

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

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

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

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

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

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

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

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

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

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


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