Можно ли с помощью PHP и mysqli перехватывать все ошибки mysqli в одном месте во всех сценариях PHP? - PullRequest
1 голос
/ 10 марта 2012

Можно ли перехватывать все ошибки для вызовов mysqli в одном месте одним оператором или мне нужно проверять каждый вызов mysqli отдельно на наличие ошибок?

Я хочу сделать что-то вроде:

if(mysqli_error_occurs_anywhere_in_web_app) {
    die('<html><head></head><body>database error</body></html>');
}

в основном, если где-то происходит ошибка mysqli, я хочу вывести html документ об ошибке базы данных. это возможно?

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Вы можете поочередно обернуть все свои запросы в свою собственную функцию запроса, вместо непосредственного вызова mysqli_query.Например, в вашем собственном объекте БД.Таким образом, если вам когда-либо понадобится переключить реализации БД, вам просто нужно переключиться на новый объект БД с несколько иной реализацией ваших функций запросов вместо того, чтобы искать / заменять гобы вызовов mysqli_query напрямую.Кроме того, он имеет преимущество в том, что обработка ошибок действительно проста и централизована.

1 голос
/ 10 марта 2012

Первое, что вам нужно спросить себя, хотите ли вы одинаково обрабатывать все ошибки базы данных. Если вы не можете подключиться к вашей базе данных, это серьезная ошибка и может указывать на то, что ваш сервер базы данных не работает. В этом случае вы можете захотеть отправить вам какое-то срочное предупреждение (если вы еще не отслеживаете свою БД другим способом). Если запрос не выполняется из-за синтаксической ошибки SQL, это, вероятно, признак того, что вы не экранируете входные данные или в вашем коде есть ошибка. В этом случае вы, вероятно, захотите зарегистрировать как можно больше информации, чтобы позже можно было отладить / разобрать проблему.

Итак, кроме этого, первое, что вам, вероятно, понадобится, - это обернуть ваши функции mysqli, чтобы вы могли перехватывать различные ошибки и обрабатывать их так, как вам нужно (либо написав свой собственный класс БД, либо используя свои собственные функции) - в документации по PHP приведены примеры того, как вы можете начать это делать ( mysqli docs ). Или вы можете взглянуть на PDO, который AFAIAA имеет более полезную обработку ошибок (смесь исключений и возвращаемых значений).

Тогда вам потребуется одна единственная точка в коде, чтобы справиться с этим. Если у вас есть какой-то фронт-контроллер, вы можете установить его там. Или вы можете написать свой собственный обработчик исключений для достижения того, что вам нужно ( set_exception_handler ).

Самым быстрым и грязным решением было бы написать свой собственный обработчик ошибок, чтобы перехватывать и анализировать все ошибки и действовать соответствующим образом (возможно, перенаправить на страницу ошибок db, в которой вся информация была зарегистрирована). Но я же сказал, что это было самое грязное решение, верно?

0 голосов
/ 10 марта 2012

Вы можете попробовать установить глобальный обработчик исключений и проверить, относится ли обнаруженное исключение к собственному классу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...