Php 受影响的行不工作-Codeigniter

Php 受影响的行不工作-Codeigniter,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,我的模型中有这个删除功能。当您按delete按钮时,它将从我的数据库中的total notes列中减去total notes的数量。例如,如果您有200条注释,并且删除了其中一条,那么它将是199条注释,并且该注释将从数据库中删除 我的代码: public function entry_delete($pid) { $uid=$this->session->userdata('uid'); $whereConditions = array('pid

我的模型中有这个删除功能。当您按delete按钮时,它将从我的数据库中的total notes列中减去total notes的数量。例如,如果您有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;
}
 }
但这不起作用。我不知道为什么,但当我在视图中按delete按钮时,它会将其从数据库中删除,并从total_entry表中减去-1。然而,如果我评论出

$this->db->delete('dayone_entries');
它仍然会从总的_条目中减去1


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

我不知道你是否已经解决了这个问题,但我想鬼魂说的是你的问题

if ($this->db->affected_rows() == 0) {}
是做了错误的检查。如果您只希望在成功删除的行中触发它,则需要检查

if ($this->db->affected_rows() > 0) {}
这意味着如果受影响的行数大于0,则执行此操作。在CodeIgniter中,表示
受影响的_rows()
方法用于“执行‘写入’类型查询(插入、更新等)”


然后它继续说“注意:在MySQL中,“从表中删除”返回0个受影响的行。数据库类有一个小的hack,允许它返回正确数量的受影响行。默认情况下,此hack已启用,但可以在数据库驱动程序文件中关闭。”因此,如果您的
if($this->db->infected_rows()==0){
在这两种情况下都会触发,则此攻击可能被禁用,因为您询问“受影响的行是否等于零,请执行此操作”,如果删除成功,则不应触发此攻击

不应该是
受影响的行>0
,在删除后,再对另一个表进行减法。如果条件相反,如果
受影响的行==0
(无受影响的行),则执行减法,但不执行减法sense@Ghost那么我该如何准确地修复它呢?答案已经在上面了,请更改ifcondition@Ghost前两个词:“不应该”。你的意思是“不应该”还是“不应该”?没必要:)事实上你可以回答你自己的问题,这在这里是有效的,所以,我很高兴这有帮助