2 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
捕獲任何sql語(yǔ)法或查詢錯(cuò)誤的最簡(jiǎn)單方法是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.
}
如果有任何錯(cuò)誤,程序?qū)ie(var_dump(...))根據(jù)需要執(zhí)行任何操作。
\注意:對(duì)于命名空間,如果類不作為use語(yǔ)句包含,則需要首先。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
雖然我是@Ronak 對(duì) SQL 端的回答的粉絲,但如果您想在執(zhí)行任何 SQL 之前捕獲錯(cuò)誤,您可以使用內(nèi)置的 validate 方法在執(zhí)行代碼之前檢查 API 參數(shù)。這樣做的好處是,您不僅可以要求存在哪些參數(shù),還可以要求該值應(yīng)該是什么 -在這里查看更多信息。
在你的控制器中:
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
}
添加回答
舉報(bào)