【问题标题】:How can I get both PDO exceptions and the other ones? [duplicate]如何同时获得 PDO 异常和其他异常? [复制]
【发布时间】:2016-11-15 12:17:39
【问题描述】:

我有一个这样的脚本:

try {
    $stm = $dbh->prepare("INSERT .. SELECT query");
    $stm->execute();
    if ( $stm->rowCount() > 0 ) {
        echo 'inserted';
    } else {
        throw new Exception('No rows inserted');
    }
} catch(Exception $e) { 
    echo $e;
}

如您所见,catch 块仅访问我设置的 Exceptions。实际上我还需要访问 PDO 异常。像这样的:

} catch(Exception $e, PDOException $pdo) {
    echo  isset($pdo) ?  "other message: " . $e   : null;
    echo  isset($e)   ?  "PDO message: "   . $pdo : null;
}

如你所知,我目前的语法是错误的。我说的是catch(Exception $e, PDOException $pdo)。那么有什么解决方法吗?

【问题讨论】:

  • 你可以抛出一个 PDO Exception 实例,并且在 catch 块中只处理 PDOException。比如 try { throw new PDOException('No rows inserted')} catch (PDOException $e) { echo $e->getErrorMessage }
  • Exception 也会捕获 PDOException,因为后者继承自前者。
  • 我不确定我是否理解 Q。您的 catch 块已经设置为在 PDOException 发生时捕获它,并捕获您的。它们不会同时发生,因为要引发您的异常,PDO 操作必须已完成而没有引发它自己的异常

标签: php pdo exception-handling try-catch


【解决方案1】:

你可以使用多个 catch 块

catch(PDOException $pdo) { 
    echo $pdo;
}
catch(Exception $e) { 
    echo $e;
}

或者你仍然可以保留一个 catch 块并寻求 instanceof 的帮助

catch(Exception $e) { 
    if($e instanceof PDOException)
        // pdoexception
    else
       // others
}

【讨论】:

  • 您是指一个try 和两个catchs 吗?这可能吗?
  • 是的,当然可以
  • 酷..谢谢+1 ..!
猜你喜欢
  • 1970-01-01
  • 2021-09-09
  • 2019-09-22
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2019-02-15
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多