Codeigniter更新未按预期执行

时间:2017-01-08 15:05:01

标签: php mysql codeigniter

我在编程方面相当新,我遇到了问题。我有一个开始计费按钮,这将使所有用户的每月会费等于800.如果我再按一次,那么每月会费仍然是800,但欠款现在将变为800.如果我最后一次按,每月会费仍然是800,然后拖欠会变成1600.这个过程还在继续。我的问题是,我在模型中设置了if else。如果每月会费和欠款都等于0,那么它将正确地将每月会费更新为800,而欠款将仍为0.但是,如果我更改了值并在phpmyadmin中将每月会费和欠款设为0(以便模拟房主支付他/她的会费),价值观跟随他人的帐户。请查看下面的视频,以便更好地理解我的观点。

视频:https://youtu.be/nULIAqLXNso

型号:

function billstart_user()
{
    $query = $this->db->select('*')->from('accounts')->where('role', 0)->where('isActive', 1)->get();

    foreach($query->result() as $row):

        $data = array(
               'monthly_dues' => '800',
               'arrears' => '0',
            );

        $data2 = array(
               'monthly_dues' => '800',
               'arrears' => $row->arrears + '800'
            );


        if($row->arrears && $row->monthly_dues == 0)
        {
            $this->db->where('role', 0)->where('isActive', 1)->where('userid', $row->userid);
            $this->db->update('accounts',$data);

            print_r($this->db->last_query());
        }
        else if($row->arrears == 0 && $row->monthly_dues > 0 || $row->arrears && $row->monthly_dues > 0)
        {  
            $this->db->where('role', 0)->where('isActive', 1);
            $this->db->update('accounts',$data2); 

            print_r($this->db->last_query());
        }

    endforeach;
}

以下是更新后查询显示的内容:

UPDATE `accounts` SET `monthly_dues` = '800', `arrears` = '0' WHERE `role` =0 AND `isActive` = 1 AND `userid` = '32'
UPDATE `accounts` SET `monthly_dues` = '800', `arrears` = 4000 WHERE `role` =0 AND `isActive` = 1
UPDATE `accounts` SET `monthly_dues` = '800', `arrears` = 4000 WHERE `role` =0 AND `isActive` = 1
UPDATE `accounts` SET `monthly_dues` = '800', `arrears` = 4000 WHERE `role` =0 AND `isActive` = 1

1 个答案:

答案 0 :(得分:0)

您只在第一个查询中指定userid。这意味着查询运行的其他3次您将4000应用于表中的每条记录。