为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Laravel 中处理服务器端异常

如何在 Laravel 中处理服务器端异常

万千封印 2022-10-22 16:46:14
如何处理 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;        }但我没有得到邮递员的任何东西。这是快照:
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

捕获任何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 - 查询异常


查看完整回答
反对 回复 2022-10-22
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

虽然我是@Ronak 对 SQL 端的回答的粉丝,但如果您想在执行任何 SQL 之前捕获错误,您可以使用内置的 validate 方法在执行代码之前检查 API 参数。这样做的好处是,您不仅可以要求存在哪些参数,还可以要求该值应该是什么 -在这里查看更多信息。


在你的控制器中:


public function validateRequest(Request $request) 

{

    $rules = ['status' => ['required', Rule::in(['inactive', 'active'])]];

    $messages = ['status' => 'Status is a required parameter and must be either inactive or active'];

    $this->validate($request, $rules, $messages);

}

然后在你的 try 块中


try {

     $this->validateRequest($request)

     // ... rest of code goes here

} catch (Exception $e) {

     return response()->json($e->getMessage(), 200); // response()->json() is a facade to return a JSON response 

}


查看完整回答
反对 回复 2022-10-22
  • 2 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信