【问题标题】:PHP database error handling in try-catch block using PDO connection使用 PDO 连接的 try-catch 块中的 PHP 数据库错误处理
【发布时间】:2016-07-17 19:46:34
【问题描述】:

我正在做一个练习,如果数据库行不存在,则使用 try-catch 块抛出异常。这是read() 函数的示例:

class Manager {
    private $desc;
    private $id;
    private $newDesc;
    public function read($id) {
        $db = new PDO('mysql:host=localhost; dbname=database', 'root', '');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try {
            $sql = "SELECT * FROM table where `id` = :id_val";
            $query = $db->prepare($sql);
            $query->bindParam(":id_val", $id);
            $query->execute();
            $results = $query->fetchAll(PDO::FETCH_ASSOC);
        } catch (Exception $e) {
            echo "Could not return specified row! <br />";
            echo $e->getMessage();
        }
        echo "<pre>";
        print_r($results);
        echo "</pre>";
   }
}

在我运行的课程之外:

$manager = new Manager();
$manager->read(44); // this is an id that IS NOT an existing record

我的浏览器显示 Array()
我是在 try-catch 中放置了错误的语句,还是完全是别的东西?

【问题讨论】:

  • 有空结果集不会被抓到,单独处理
  • "数据库行不存在时的异常" -- 您必须自己抛出异常,因为默认情况下不会抛出异常。

标签: php mysql pdo exception-handling try-catch


【解决方案1】:

这是正常行为,“try catch”语句会捕获错误、异常...没有给定 id 的记录不是错误。如果你想检查是否有记录,你可以用

来计算你的结果集
count($results);

如果此计数大于 0,则存在。

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多