在foreach循环程序数据库时try和catch的使用
在之前工作中遇到过EXCEL导入数据错误的问题,数据中断了。(当时是测试老胡发现的),后经排查是因为foreach循环体放到了try捕捉异常catch内部了,即第2种情况。由前同事APSON帮助调查了该问题。今天又写到这块,所以记录下日记巩固加深下印象。
第1种方式是把try放入foreach循环体内部中:这种情况当其中1条数据插入异常时,不会影响下一条语句继续执行
foreach($RESULT as $insert_row)
{
try{
$resp = MDL::create($insert_row);
} catch (\Exception $e){
Log::error("SQL异常: ".$e->getMessage());
continue;
}
}//
//第2种是foreach放入try内部中:当其中1条数据插入异常时,会终止循环,不会再执行下一条语句,跳到catch中。
一般用于批量写数据时,要求数据一致性的话,需要修改下面的程序,加上事务处理。即要么全部插入成功,如果其中1条语句写入错误则全部回滚
try{
foreach($RESULT as $insert_row)
{
$resp = MDL::create($insert_row);
}//
} catch (\Exception $e){
Log::error("SQL异常: ".$e->getMessage());
continue;
}