我正在尝试在事务中捕获数据库错误,如果发生,则回滚并抛出异常。
但是,代码在抛出异常之前停止并显示db错误屏幕。
如何在不停止运行后续代码的情况下如何检测db错误?
try {
$this->my_function($data);
} catch (Exception $e) {
var_dump($e);
}
private function my_function($data)
{
$this->db->trans_start();
foreach($data as $reg)
{
$sql = $this->db->insert_string('my_table', $reg);
if($this->db->query($sql))
{
continue;
} else {
$this->db->trans_rollback();
throw new Exception('Exception message here...');
}
}
$this->db->trans_complete();
}
答案 0 :(得分:1)
此问题已在this问题
之前得到解答由cwallenpoole回答:
在application / config / database.php中设置
// suppress error output to the screen
$db['default']['db_debug'] = FALSE;
在您的模型或控制器中:
// try the select.
$dbRet = $this->db->select($table, $dataArray);
// select has had some problem.
if( !$dbRet )
{
$errNo = $this->db->_error_number()
$errMess = $this->db->_error_message();
// Do something with the error message or just show_404();
}
或者在你的情况下:
private function my_function($data)
{
$errors = array();
$this->db->trans_start();
foreach($data as $reg)
{
$sql = $this->db->insert_string('my_table', $reg);
if($this->db->query($sql))
{
continue;
} else {
$errNo = $this->db->_error_number()
$errMess = $this->db->_error_message();
array_push($errors, array($errNo, $errMess));
}
}
$this->db->trans_complete();
// use $errors...
}
更好
我相信this question拥有您需要的所有答案,因为它需要考虑多个插入,让您完成一次没有返回错误。