Как вы обрабатываете все ошибки, генерируемые хранимой процедурой MySQL - PullRequest
0 голосов
/ 12 февраля 2010

Фон

Я пишу веб-приложение, и у меня есть хранимая процедура, которая вставляет некоторые данные в таблицу. Как программист, я подозреваю IO, поэтому моя интуиция говорит мне, что мне нужно выполнить некоторую обработку исключений в случае сбоя при записи.

Предполагаемым эффектом обработки ошибок в хранимой процедуре будет установка флага, который будет использоваться DAL (в PHP), который будет предупреждать пользователя о том, что что-то сломалось, а также отправка сведений администратору.

Вопросы

Какова лучшая стратегия в отношении обработки ошибок на этом уровне, если я хочу, чтобы любая сгенерированная ошибка вызывала эту обработку? Коды ошибок MySQL и значения SQLSTATE хороши для выявления конкретных ошибок и, похоже, не являются тем, что я ищу. SQLEXCEPTION кажется более широким механизмом обработки ошибок, который может удовлетворить мои потребности, но мне интересно, если это несколько похоже на перехват Exception в C # с точки зрения возможности ловить вещи, которые я действительно не должен Я смотрю на это совершенно НЕПРАВИЛЬНО? В настоящее время я считаю, что хранить как можно большую часть логики данных в базе данных - хорошая идея, поэтому обработка ошибок базы данных в швах базы данных естественна, но я открыт для предложений.

1 Ответ

1 голос
/ 12 февраля 2010

Я смотрю на это с совершенно неправильным углом?

Да. Если вы не можете доверять своей базе данных для обработки ошибок ввода-вывода, вам не хватает смысла в использовании базы данных.

Обычное упражнение - это делать как можно меньше в ваших хранимых процедурах. Ваша PHP-программа получит ошибки и исключения, и именно этого вы и хотели. Так как PHP получит исключения, о чем вы беспокоитесь? Просто дайте им выскочить из вашей хранимой процедуры.

Ваш PHP должен будет «предупредить пользователя о том, что что-то сломалось».

Если вы хотите каким-то образом «обернуть» всю вашу хранимую процедуру в какую-то запись ошибок, сделайте это на PHP. Не связывайтесь с перезаписью ваших хранимых процедур. Не беспокойтесь об ошибках ввода / вывода. У вас есть база данных, чтобы справиться с этим.

...