【问题标题】:Affected Rows not working - Codeigniter受影响的行不起作用 - Codeigniter
【发布时间】:2015-05-04 21:36:12
【问题描述】:

我的模型中有这个删除功能。当您按下删除按钮时,它将从我的数据库中的总笔记列中减去总笔记数。例如。如果您有 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。

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

【问题讨论】:

  • 不应该是affected rows > 0,删除后,再在另一张表上做减法。你的if条件倒置了,如果affected rows == 0(没有受影响的行),然后做减法,那没有意义
  • @Ghost 那么我该如何解决呢?
  • 答案已经在上面了,换个if条件
  • @Ghost 前两个词:“不应该”。你的意思是“不应该”还是“不应该”?
  • 不需要 :) 实际上你可以回答你自己的问题,它在这里有效,我很高兴这有帮助

标签: php mysql database codeigniter


【解决方案1】:

我不知道你是否已经解决了这个问题,但我认为 Ghost 说的是你的

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

做错了检查。如果您只希望它在成功删除的行时触发,您需要检查

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

这表示如果受影响的行数大于 0,则执行此操作。在 CodeIgniter 中,affected_rows() 方法用于“执行‘写’类型的查询(插入、更新等)”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多