我在CI中遇到了处理数据库错误的简单方法的困难。例如,我不能在数据库表中插入重复的条目。如果我尝试这样做,就会收到1062
数据库错误。
最常见的解决方法是检查条目是否已经存在,并在if语句中使用$query->num_rows() > 0
来防止错误发生。对我来说,这种方法似乎是多余的,因为我正在执行额外的查询。理想情况下,我希望检查我的主查询是否出现错误或是否影响了某一行。
我找到了以下可能有用的函数
$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);
处停止,并显示整个数据库错误。
IGNORE
也是一个好的解决方案吗?我试图尽量减少数据库查询,如果重复行已经存在。 - CyberJunkiestr_replace('INSERT','INSERT IGNORE',$this->db->insert_string('subscription',$data));
。 - cwallenpoolequery
来实现此操作。simple_query
虽然在需要最小处理时很有用,但并不像query
做的那么多。 - cwallenpoole