PHP, PDO и исключения - PullRequest
       8

PHP, PDO и исключения

3 голосов
/ 25 августа 2011

В настоящее время у меня возникла небольшая дилемма в отношении PDO.Недавно я перешел на использование его из своего собственного пользовательского класса базы данных, поскольку хочу использовать преимущества транзакций.Проблема, с которой я сталкиваюсь, заключается в том, как генерировать исключения изнутри блока кода, который уже обернут в try / catch для PDO.Вот пример ...

try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)

   // Transaction commit

} catch (PDOException $e) {
    // Transaction rollback
    // Code to handle the exception
}

Принимая приведенный выше пример кода и помня, что говорится в руководстве по PHP;Msgstr "Вы не должны выбрасывать исключение PDO из вашего собственного кода".Как бы я обработал свои собственные исключения и PDO?Какое-то гнездо?

Ответы [ 3 ]

5 голосов
/ 25 августа 2011
try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)
    throw new MyException("all went tits up");

   // Transaction commit

} catch (PDOException $e) {
    // Transaction rollback
    // Code to handle the exception
} catch (MyException $e) {
    // Transaction rollback
    // Code to handle the exception   
}

Дело в том, что у вас будет дублированный код, который не будет пахнуть слишком хорошо.Я бы порекомендовал просто поймать "Исключение", например:

try {
    // PDO code

    // Transaction start

    // Throw manual exception here if error occurs (transaction rollback too)
    throw new MyException("all went tits up");

   // Transaction commit

} catch (Exception $e) {
    // Transaction rollback
    // Code to handle the exception
}
1 голос
/ 25 августа 2011
try{
    //code here
}
catch(PDOException $e){
    //handle PDO
    throw $e; //to rethrow it upper if need
}
catch(Exception $e){
    //handle any other
}
0 голосов
/ 25 августа 2011

Если что-то идет не так, PDO сгенерирует исключение.Но если вы сделаете некоторые изменения в БД и захотите отменить все, что вы можете запустить

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