您好,我正在尝试更新表格中的列。我已经在列中选择了一个范围,并使用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?
谢谢,
答案 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.
完成并完成。谢谢所有人的帮助。