Я залез в дыру в проекте, над которым работаю. У меня есть этот массивный проект (сотни тысяч строк), и везде есть ошибки MySQL. Я сейчас занимаюсь их очисткой.
У меня есть этот класс базы данных, через который проходят все запросы, поэтому я делал так, что всякий раз, когда возникает ошибка SQL, я теперь выбрасываю исключение. Проблема в том, что я не могу остановить выполнение. Он должен продолжаться, как всегда, и просто регистрировать исключения, чтобы я мог отслеживать их и исправлять по одному.
Я надеялся, что set_exception_handler
сделает то, что я хочу, но в документах конкретно сказано, что он остановит выполнение после вызова моего обработчика. Итак, как мне обойти это?
Исключение может остановить текущую функцию, но затем я хочу, чтобы она вышла из функции, возможно, вернув null или false, а затем продолжила работу в обычном режиме, но мне нужно, чтобы она вызвала мой глобальный обработчик исключений.
Чтобы уточнить:
Я хочу создать исключение из моего класса базы данных (всякий раз, когда возникает ошибка SQL). Затем я хочу зарегистрировать эту ошибку и/или отобразить сообщение на экране до тех пор, пока я не смогу либо исправить ошибку SQL, либо обернуть ошибочную строку в try/catch. Я не хочу, чтобы это останавливало выполнение. Если я просто вызову какую-нибудь функцию error_handler()
вместо того, чтобы генерировать исключение, то я не смогу ее перехватить. Если я поймаю его немедленно (также в классе DB), то я не смогу поймать его дальше по стеку (если я не выкину его повторно, но тогда мы вернемся к остановке выполнения).
$db->myCustonQuery()
, вы знаете, что если произойдет ошибка, он вызовет исключение, которое вы можете обработать где-то еще. Суть этого ответа в том, что если выreturn false
, вы сможете продолжить выполнение. 01.03.2012$db->GetSingleRecord()
, но необязательно, потому что есть тысячи вызовов указанной функции, и мне нужно пройти их все. Имеет ли это смысл? Я думаю, что то, что я прошу, нереально, но это было бы оптимальным случаем. 01.03.2012