我的模型中有这个删除功能。当您按下删除按钮时,它将从我的数据库中的总备注列中减去总备注的数量。例如。如果您有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。
我该如何解决这个问题?感谢。
答案 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) {}
在两种情况下都会触发,则可以禁用此黑客,因为您要求"如果受影响的行等于零,请执行此操作"如果您的删除成功,它应该触发。