@liltrill

Как правильно обрабатывать ошибки в PHP PDO?

Всем привет!)

Я запутался в элементарных вещах, пытаюсь найти инфу, так больше путаю себя.

Например есть action с регистрацией, перед тем как продолжить регистрацию я проверяю занята ли почта

$emailFlag = User::checkEmailUser($options['email']);
if ($emailFlag > 0) {
     echo json_encode(array('flag' => false, 'text' => 'Ошибка: Почта занята!'));
     return true;
}


public static function checkEmailUser($email)
    {
        // Соединение с БД
        $db = Db::getConnection();

        // Текст запроса к БД
        $sql = "SELECT * FROM user WHERE email = :email";

        // Подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':email', $email);
        $result->execute();

        // Возврат полученного результата
        return $result->rowCount();
    }


Если возьмем сразу то что SQL запрос верный, то может ли произойти просто сбой в MySql?, и как его обработать? Прочитал про исключения, но как красиво сделать? без try вообще можно?

Еще даже так сформулирую: Как правильно и красиво написать запрос к MySql, чтобы пользователь увидел что с MySql что то не так, типа такого: Ой, MySql не отвечает...

P.S: Использую MVC паттерн
  • Вопрос задан
  • 796 просмотров
Решения вопроса 3
anton_reut
@anton_reut
Начинающий веб-разработчик
Почитай про try, throw, catch - https://www.php.net/manual/ru/pdo.error-handling.php
То что юзеру не нужно видеть код ошибки это очень правильно.
Ответ написан
mad_maximus
@mad_maximus
Чем, собственно, вам try..catch не нравится?

try {
   $connection->beginTransaction();

   $this->questions->declineQuestion(Question::NEW, $uniqid);
   $this->mentorWorks->failWork($userId, $questionId, $uniqid);

   $connection->commit();
} catch (\PDOException $e) {
   $connection->rollBack();
   $this->logger->warning($e->getMessage);
}
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Стоило на неделю лечь в больницу, как изо всех щелей поналезли гамадрилы

Первый, традиционно для тостера, рекомендует читать про то, в чем сам не смыслит ни бельмеса.

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

Третий тупо кидает ссылку на свое пахучее спагетти, в котором цинично измывается над механизмом исключений.

Как правильно и красиво написать запрос к MySql, чтобы пользователь увидел что с MySql что то не так, типа такого: Ой, MySql не отвечает


Никак.

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

Обработку ошибок надо делать унифицированно и осуществлять в одном месте. А не размазывать, как манную кашу по тарелке, по всему коду.

Берём функцию, set_exception_handler(), и пишем в нее один раз все что хотим сказать юзеру в случае ошибки. Любой ошибки, а не только соединения с базой данных.

Примечание: юзеру глубоко фиолетово, MySQL не отвечает, или космическая станция на Марсе. Он, скорее всего, даже такого слова не знает. И грузить его подробностями не нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Nujabes37
:DEATH
https://github.com/Umarbatalov/http-service/blob/m... Если интересно можешь глянуть как сделал я, хотя я не говорю, что это правильно) Только вместо кода ошибки, возвращай, что-нибудь другое, эт я для себя делал)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы