php - 如何使用 PDO 的 try-catch block

标签 php mysql pdo try-catch

当使用 try catch block 时,处理 PDO 错误的正确方法是什么?

目前我有这样的东西:

BlogModel.php

   class BlogModel extends Model {
       public function save($id, $value) {
         $stmt = $this->getDb()->prepare('UPDATE setting SET name = :name WHERE id = :id');
         $stmt->bindParam(':id', $id);
         $stmt->bindParam(':name', $values);
         return ($stmt->execute() !== false) ? $id : false;
       }
   }

所以,在 Controller BlogController.php 中,我会做这样的事情:

<?php
class Blog extends Controller {

    public function comments()
    {
        $data = array();
        $model = new BlogModel;

        if ($model->save(2,'test')) {
                $data['result']['message'] = 'Settings saved';
                $data['result']['status'] = 'success';
        } else {
                $data['result']['message'] = 'Could not save the settings';
                $data['result']['status'] = 'error';
        }

        $view = new View("view.php", $data)
        $view->render();
    }
}
?>

这是我使用 if 条件处理 PDO 错误的方式。将其转换为 try catch block 的正确方法是什么?我不想对变量 ($data['result']['message'] $data['result']['status']) 全部进行编码时间。

是否可以通过某种方式在 catch block 中添加“抛出异常”?

如果 Controller 中有很多 try catch block ,它看起来会很乱......对吧?

最佳答案

这里没有一个答案是错误的。但实际上这三者加起来才是真正的答案。 你绝对应该设置

$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

正如 Cerad 所说。

从现在开始,关于数据库的任何问题都将通过 PDOException 类型的异常抛出。你不必像 ladar 所说的那样抛出你自己的 Exception 因为它没用。只需将 ladar 代码转换成

 ...
 $data = array();
 $model = new BlogModel;

    try{
      $model->save(2,'test');
      $data['result']['message'] = 'Settings saved';
      $data['result']['status'] = 'success';
    }catch(PDOException $e){
        $data['result']['message'] = 'Could not save the settings';
        $data['result']['status'] = 'error';
    }

并且不要自己扔任何东西。

调试 PDO 查询的一个非常好的方法是使用 Basic 链接的 catch 脚本,您可以找到 here再一次。

将这些东西结合在一起,您将拥有一种灵活、干净且​​易于调试的方法来捕获所有可能出现的错误。

关于php - 如何使用 PDO 的 try-catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252276/

相关文章:

二维数组的 PHP 组合对作为 Christofides 算法解决方案的一部分

php - 从第三方站点返回后 session 不正确

php - 将 HTML 元素数组发布到 PHP

php - 如何正确保护表单 - 平面文件数据库

php - 选定的查询结果放置在更多 DIV 中

php - MySQL 自定义逐行连接

php - 为什么我的查询会导致 Cardinality violation error PDO/PHP MySQL

Mysql FULLTEXT索引,搜索锁表

php - 引用来自 PDO::FETCH_ASSOC 的关联数组值

php - 更新当前用户信息 PHP PDO 时出现问题