我有一个 INSERT 查询可能会由于数据库中的某些唯一键而失败所以我使用 try/catch 来避免错误...顺便说一句 form_id
是唯一的
try {
$reward = new UserCreditForm();
$reward->user_id = $form->user_id ;
$reward->form_id = $form->id ;
$reward->amount = $amount ;
$reward->result = $result ;
$reward->save();
$form->result = $result ;
$form->save();
}
catch ( Exception $e )
{
$form->error_flag = 6 ;
$form->save();
}
但是当 uniqu 键失败时 try/catch 不起作用,我得到了
Whoops, looks like something went wrong.
(2/2) QueryException
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'user_credit_forms_form_id_unique' (SQL: insert into `user_credit_forms` (`user_id`, `form_id`, `amount`, `result`, `updated_at`, `created_at`) values (2, 1, 499392, 1, 2017-08-31 14:45:06, 2017-08-31 14:45:06))
如果查询失败,有没有办法避免错误并跳到捕获部分?
最佳答案
您应该使用 catch (\Exception $e )
来捕获 try
中的所有异常。
最终形式应该是这样的:
try {
$reward = new UserCreditForm();
$reward->user_id = $form->user_id ;
$reward->form_id = $form->id ;
$reward->amount = $amount ;
$reward->result = $result ;
$reward->save();
$form->result = $result ;
$form->save();
}
catch ( \Exception $e )
{
$form->error_flag = 6 ;
$form->save();
}
关于php - laravel try/catch 不适用于失败的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45979024/