我的模型中有这个删除功能。当您按下删除按钮时,它将从我的数据库中的总注释列中减去总注释数。例如。如果你有 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;
}
}
但这行不通。我不知道为什么,但是当我从我的 View 中按下删除按钮时,它会从数据库中删除它并从我的 total_entry 表中减去 -1。但是,如果我注释掉
$this->db->delete('dayone_entries');
它仍然会从 total_entry 中减去 1。
我该如何解决这个问题?谢谢。
最佳答案
我不知道你是否解决了这个问题,但我认为 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) {}
在这两种情况下都被触发,则可以禁用此 hack,因为您询问“受影响的行是否等于零” this”,如果删除成功则不应触发。
关于php - 受影响的行不工作 - Codeigniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845287/