Php 如何在Laravel中处理服务器端异常
如何处理Laravel上的服务器端异常? 我正在创建一个更新API,并传递了一个错误的值来处理异常,但我无法使用try-catch块捕获该错误。有人能帮我吗? 代码如下: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" } } 如您所见,我试图传递一个无效字段,即状态
{
"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。我来查一下