为什么PHP更新未选择的数据?

时间:2014-05-17 06:00:33

标签: php mysql sql codeigniter

您好,我正在尝试更新表格中的列。我已经在列中选择了一个范围,并使用foreach循环遍历它们。但是,我注意到它不仅更新了我选择的范围,而且还超出了选择范围。一些建议表示赞赏!

代码:

$this->db->where('weekday', 5);
$this->db->where('source', 'site');

$record = $this->db->get('user', 200);

$print_r($record->num_rows());

foreach ($record->result() as $row) :
    $data = array(
        'weekday' => 1,
    );

    $this->db->where('user_id', $row->user_id); //added based on an answer provided below
    $this->db->update('user', $data);

endforeach;

这确实看起来很简单,我确实从print_r得到了200行。但是代码实际上更新了表中的所有3000行,我没有在$ record变量中选择。怎么会发生这种情况?

谢谢,

更新:许多人尝试过,我们仍未能跟踪问题。您是否可以帮助想出另一种方法来完成工作而不使用foreach?

谢谢,

3 个答案:

答案 0 :(得分:0)

放线:

$this->db->update('user', $data);

在foreach之外

foreach ($record->result() as $row) {
        $data=array
            (
                'weekday'=>1,
            );

}
$this->db->update('user', $data);

答案 1 :(得分:0)

<?php

// SELECT * FROM 'user' WHERE 'weekday' = 5 AND 'source' = 'site' LIMIT 200
$this->db->where(['weekday' => 5, 'source' => 'site']);
$record = $this->db->get('user', 200);

foreach($record->result() as $row) {
    // UPDATE 'user' SET  'weekday' = 1 WHERE 'user_id' = {$row->user_id}
    $this->db->update('user', ['weekday' => 1], ['user_id' => $row->user_id]);
};

试试这个,ps:不要引用我这段代码,自从我为PHP编写最后一段时间后

答案 2 :(得分:0)

问题解决了。您无法限制更新功能的功能。尽管有foreach函数,它仍会对表中的所有行进行更新。为了实现同样的目标,我采取了:

            $update = "UPDATE user SET weekday = 2 WHERE user_category=4 LIMIT 200";
            $this->db->query($update); 

            $update = "UPDATE user SET weekday = 2 WHERE user_category=4 LIMIT 200";
            $this->db->query($update); 

            $update = "UPDATE user SET weekday = 2 WHERE user_category=4 LIMIT 200";
            $this->db->query($update); 

            $update = "UPDATE user SET weekday = 2 WHERE user_category=4 LIMIT 200";
            $this->db->query($update); 

                    ...... all the way to the end. Of course I used a while loop to do the above.

完成并完成。谢谢所有人的帮助。