Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Laravel中处理服务器端异常_Php_Laravel_Api_Pdo - Fatal编程技术网

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

Php 如何在Laravel中处理服务器端异常,php,laravel,api,pdo,Php,Laravel,Api,Pdo,如何处理Laravel上的服务器端异常? 我正在创建一个更新API,并传递了一个错误的值来处理异常,但我无法使用try-catch块捕获该错误。有人能帮我吗? 代码如下: { "user_id" : "15835943395e63bb63c449d", "changes" :{ "username" : "new username", "name" : "new name", "statuss" : "inactive" } } 如您所见,我试图传递一个无效字段,即状态

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

{
"user_id" : "15835943395e63bb63c449d",
"changes" :{
    "username" : "new username",
    "name" : "new name",
    "statuss" : "inactive"
}
}
如您所见,我试图传递一个无效字段,即状态实际为状态

以下是我处理此问题的代码:

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;
        }
但我对邮递员一窍不通

以下是快照:


提前感谢。

捕获任何
sql
语法或查询错误的最简单方法是在提供查询结束后捕获
illighted\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.
}
如果有任何错误,程序将
死亡(var_dump(…)
它需要做的任何事情

注意:对于名称空间,如果类未作为
使用
语句包含,则首先需要
\


另供参考:

虽然我非常喜欢@Ronak对SQL端的回答,但如果您想在执行任何SQL之前捕获错误,可以在执行代码之前使用内置验证方法检查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 
}

谢谢@Ronak。我来查一下