首页 > 解决方案 > 如何在 Laravel 中处理服务器端异常

问题描述

如何处理 Laravel 上的服务器端异常?我正在创建一个更新 API,并且我传递了一个错误的值来处理异常,但我无法使用 try-catch 块捕获该错误。有人能帮我吗?下面是代码:

{
"user_id" : "15835943395e63bb63c449d",
"changes" :{
    "username" : "new username",
    "name" : "new name",
    "statuss" : "inactive"
}
}

所以如您所见,我正在尝试传递一个 Invalid 字段,即status实际是status

这是我处理此问题的代码:

try{
            $json = json_decode($changes,true);
            $update = 'SET ';
            $columns = [];
            $values = [];
            $pdo = DB::connection()->getPdo();
            foreach ($json as $key => $value) {
                $columns[]=$key;
                $values[]=$value;
                $update .= $key . '=?,';
            }
            $update = substr($update, 0, -1);
            $sql = "update users ".$update." where user_id='".$request->input('user_id')."'";
            $sth = $pdo->prepare($sql, array(\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY));
            $sth->execute($values);
        }
        catch (Exception $e) {
            echo $e;
        }

但我没有得到邮递员的任何东西。

这是快照:

在此处输入图像描述

提前致谢。

标签: phplaravelapipdo

解决方案


捕获任何sql语法或查询错误的最简单方法是Illuminate\Database\QueryException在为查询提供闭包之后捕获:

try { 
   $json = json_decode($changes,true);
        $update = 'SET ';
        $columns = [];
        $values = [];
        $pdo = DB::connection()->getPdo();
        foreach ($json as $key => $value) {
            $columns[]=$key;
            $values[]=$value;
            $update .= $key . '=?,';
        }
        $update = substr($update, 0, -1);
        $sql = "update users ".$update." where user_id='".$request->input('user_id')."'";
        $sth = $pdo->prepare($sql, array(\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY));
        $sth->execute($values);
} catch(\Illuminate\Database\QueryException $ex){ 
  dd($ex->getMessage()); 
  // Note any method of class PDOException can be called on $ex.
}

如果有任何错误,程序将die(var_dump(...))根据需要执行任何操作。

\注意:对于命名空间,如果类不作为use语句包含,则需要首先。

另供参考:Laravel 6.x API - 查询异常


推荐阅读