PHP、PDO 和异常

标签 php pdo exception-handling

我目前对 PDO 有点进退两难。由于我想利用事务,我最近切换到从我自己的自定义数据库类中使用它。我面临的问题是如何从已经用 PDO 的 try/catch 包装的代码块中抛出异常。这是一个例子...

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 手册中所说的; “你不应该从你自己的代码中抛出 PDOException”。我将如何处理我自己的异常 PDO 异常?某种嵌套?

最佳答案

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
}

关于PHP、PDO 和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7188167/

相关文章:

javascript - PHP-Ajax : Display a specific row information from a while loop by clicking on a link

php - 如何将数组作为对象属性添加到 PHP 扩展中声明的类中?

php - 使用 PDO,有没有办法处理两个驱动程序之间的事务?

python - 多个调用级别的异常处理

java - Object.wait() 方法在抛出异常时是否重新获取监视器?

php - 如何从数据库中选择随机 ID,不包括已删除的 ID?

php - 使用 for 循环构建表 - 如何引用数组中的项目

php - MySQL 资源、fetch() 和循环

php - PDO/SQL Select * from function 显示没有结果

java - 使用 "setUncaughtExceptionHandler"和 "Toast"的全局异常处理