没有num_rows()的Codeigniter句柄数据库错误

时间:2011-07-15 02:01:08

标签: php database codeigniter error-handling

我在查找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);的模型中停止并显示整个数据库错误。

2 个答案:

答案 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 */ );