我在查找CI中处理数据库错误的简单方法时遇到了麻烦。例如,我无法在数据库表中插入重复的条目。如果我尝试,我会收到1062
数据库错误。
建议的最常见解决方案是检查条目是否已存在并使用
$query->num_rows() > 0
在if语句中以防止出错。这个方法对我来说似乎是多余的,因为我正在执行额外的查询。理想情况下,我想检查主查询中是否发生错误,或者行是否受到影响。
我找到了以下可能有用的功能
$this->db->affected_rows()
$this->db->_error_message()
但是我不确定如何使用它们。
我在我的模型中尝试过:
$this->db->insert('subscription', $data);
return $this->db->affected_rows();
据我所知,应该返回受影响的行数。然后在我的控制器中我添加了:
$affected = $this->Subscribe_model->subscribe($data);
if ($affected < 1)
{
//display error message in view
}
else
{
$this->Subscribe_model->subscribe($data); //perform query
}
不幸的是,如果发生错误,脚本会在$this->db->insert('subscription', $data);
的模型中停止并显示整个数据库错误。
答案 0 :(得分:2)
我不知道这是否适用于$this->db->insert();
,但$this->db->query();
如果错误则会返回false,因此您可以执行以下操作:
$sql = $this->db->insert_string('subscription', $data);
$sql = $this->db->query($sql)
if(!$sql){
//Do your error handling here
} else {
//query ran successfully
}
答案 1 :(得分:1)
尝试使用@$this->db->insert('subscription', $data);
,@
,在PHP中表示“禁止警告”。
作为替代方案 - 如果您知道数据是安全的,或者您愿意使用$this->db->insert_string
,则可以在查询结尾添加on duplicate key
。
这应该有效(未经测试):
$this->db->simple_query( $this->db->insert_string( 'subscription', $data ) .
' ON DUPLICATE KEY ' .
$this->db->update_string(
'subscription',
$data,
/* your where clause here */ );