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语句包含,则需要首先。
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
}
添加回答
举报