受影响的行无法正常工作 - Codeigniter

时间:2015-03-04 01:40:35

标签: php mysql database codeigniter

我的模型中有这个删除功能。当您按下删除按钮时,它将从我的数据库中的总备注列中减去总备注的数量。例如。如果您有200个音符,并且您删除了其中一个音符,它将是199个音符,并且该音符将从数据库中删除。

我的代码:

public function entry_delete($pid) {

        $uid=$this->session->userdata('uid');

        $whereConditions = array('pid' => $pid, 'uid' => $uid);
        $this->db->where($whereConditions);
        $this->db->delete('dayone_entries');

        if ($this->db->affected_rows() == 0) {
            $sql_entry = "UPDATE users set total_entry = total_entry - 1 WHERE uid = $uid";
            $this->db->query($sql_entry);
            return true;
        } else {
            return false;
}
 }

但这不起作用。我不知道为什么,但是当我从视图中按下删除按钮时,它将从数据库中删除它并从我的total_entry表中减去-1。但是,如果我注释掉

$this->db->delete('dayone_entries');

它仍将从total_entry中减去1。

我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

我不知道你是否已经修好了,但我想Ghost所说的是你的

if ($this->db->affected_rows() == 0) {}

正在做错检查。如果您只想要成功删除的行,则需要检查

if ($this->db->affected_rows() > 0) {}

这是说如果受影响的行大于0,则执行此操作。在CodeIgniter中,affected_rows()方法用于"做'写'类型查询(插入,更新等)"。

然后继续说"注意:在MySQL" DELETE FROM TABLE"返回0个受影响的行。数据库类有一个小的hack,允许它返回正确数量的受影响的行。默认情况下,此hack已启用,但可以在数据库驱动程序文件中将其关闭。"因此,如果您的if ($this->db->affected_rows() == 0) {}在两种情况下都会触发,则可以禁用此黑客,因为您要求"如果受影响的行等于零,请执行此操作"如果您的删除成功,它应该触发。