|
|
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
Обработка ошибок в php (НЕ set_error_handler). Общее. --- Как и где нужно проверять ошибки? <- вопрос не такой простой как кажется. Абстрактный вопрос: Нужно ли делать проверки, так как в нижеследующем коде? Код: php 1. 2. 3. 4. 5. Я догадываюсь что так никто никогда не делает, но это абстрактный пример. Далее написано более понятно. --- Спрашиваю конкретно: При тестировании кода я вносил данные в бд руками (чтобы по вебинтерфейсу не тыкать мышкой) и случайно (или не случайно) ввел в бд данные которые нарушают целостность бд . Я ввел ИД пользователя которого никогда не было и нет в бд. Запрос вернул не правильные данные. Такая ошибка практически не возможна , но теоретически все возможно. ВОПРОС: Как (и нужно ли) проверять ошибки которые практически невозможны? --- И еще пример, который на 100% будет понятен всем. Если перед каждым запросом проверять существование таблицы и полей в ней ( ведь может быть так, что в бд не будет таблицы или некоторых полей в таблице )*, то из-за таких проверок код превратиться в мягко говоря "неуклюжий код". *Да, такое вполне может быть, если таблицы создаются динамически. Тут проверки зависят от логики приложения. А в единожды созданной бд, структура которой не будет изменятся во время работы приложения, такие проверки не нужны. Вот в этом и вопрос: Как, в каких случаях, и когда нужно делать проверки неких данных и\или условий в коде? Что почитать об этом? --- Про set_error_handler и исключения в др языках: У меня ввесь принцип обработки ошибок следующий: Если вызывается функция, то она или отработает хорошо или выведет сообщение об ошибке и сделает exit. Код: php 1. 2. 3. 4. Еще у меня set_error_handler пишет ошибки в отдельный лог-файл. Но не все ошибки ловит set_error_handler. Ниже об этом написал. Ни set_error_handler, ни какие-то Exception в некоторых случаях не подходят. Почему? Ну какое исключение или ошибка в(set_error_handler) может быть передано\перехвачено, ЕСЛИ (например) запрос вернул 0 строк и данных для вывода нет. Это же как-бэ ошибка, но это нормальная ошибка (результат запроса который будет обработан соответствующим образом). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 00:42 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
Обработка ошибок в php (НЕ set_error_handler). - это подзаголовок темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 00:44 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
aliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности! А если можно ввести такие данные, то система правил контроля целостности (constraints) у тебя построена неправильно и ни хрена не контролирует. И исправлять это нужно именно на уровне структуры БД, а не размышлять, где и как отлавливать потом эту хрень на клиентском уровне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 07:28 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
Akinaaliskinввел в бд данные которые нарушают целостность бд Прочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, которые противоречат критериям целостности! Раньше была другая философия в PHP+MySql. Наверно это наследие тех времен. Зачатки NoSQL. В MySql для таблиц MyISAM отсутствует поддержка внешних ключей и транзакций. За счет этого быстрее чтение. Раньше за это любили и использовали в связке PHP+MySql. Если не путаю, нынче MyISAM заброшен разработчиками MySql и MariaDB как тупиковое направление развития, но поддерживается. AkinaИ исправлять это нужно именно на уровне структуры БД, а не размышлять, где и как отлавливать потом эту хрень на клиентском уровне. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 08:01 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
Dima TРаньше была другая философия в PHP+MySql. В MySql для таблиц MyISAM отсутствует поддержка внешних ключей и транзакций. Тогда нельзя говорить о нарушении целостности БД. Несоответствие данных в БД бизнес-процессу - да, но не более. Но эта проблема легко решается тотальным запретом прямого доступа к данным и реализацией всей логики работы с данными БД в формате хранимых процедур, где и реализуется логика контроля целостности и непротиворечивости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 08:11 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
AkinaНо эта проблема легко решается тотальным запретом прямого доступа к данным и реализацией всей логики работы с данными БД в формате хранимых процедур, где и реализуется логика контроля целостности и непротиворечивости. Хранимых процедур там тоже не было. Да и толку от них, если транзакций нет. Было все примитивно: чтобы что-то записать блокируется таблица. Один insert - одна блокировка. MyISAM если интересно. Повторюсь, это уже история, разработчики СУБД отказались от развития этого направления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 08:26 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
Akina, авторПрочитал - и аж обалдел... нельзя, понимаешь, НЕВОЗМОЖНО ввести в БД данные, можно так сделать. Потому что у меня таблицы InnoDB БЕЗ ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 17:13 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
в принципе я уже понял. Нужно настроить бд. Раньше оно у меня было в MyISAM. я перевел в InnoDB, но ключи не задал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 17:17 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
что с бд делать - понятно. А с другими ошибками (то есть с обработкой) как бять? Ну то понятно что мне как архитектору приложения нужно самому об этом заботиться, но как правильно, по научному это делать? Ведь можно (см ВТОРОЙ пример вначале) вместо правильного значения $ifrend вернуть fakse и в месте вызова этой функции обрабатывать ошибку. А можно делать так как я делаю - или функц отработает хорошо ИЛИ в ней скрипт завершиться с выводом сообщения об ошибке. Недаюсь вы меня поняли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 18:14 |
|
||
|
Обработка ошибок (общее). Что где об этом почитать? (сложная тема)
|
|||
|---|---|---|---|
|
#18+
aliskinА с другими ошибками (то есть с обработкой) как быть? ИМХО Это надо в профильном форуме спрашивать. В каждом ЯП свои средства по данному вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 18:20 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=22&tid=1340443]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 405ms |

| 0 / 0 |
