2014-05-17 67 views
0

嗨我想更新表中的列。我在列中選擇了一個範圍,並使用foreach循環遍歷它們。但是,我注意到它不僅更新了我選擇的範圍,還更新了選擇範圍。一些忠告讚賞!爲什麼PHP更新未選擇的數據?

代碼:

$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; 

這的確看起來簡單,我也從我選擇200 rows.But代碼實際更新表中的所有行3000我沒有在$選擇的print_r得到記錄變量。這怎麼會發生?

感謝,

更新:很多人嘗試了,我們依然未能追蹤問題。你能否想到另一種方式來完成工作而不使用foreach?

感謝,

+0

我正在使用codeigniter,這是在提取數據之前定義標準的方法。加上我用print_r來確認我只拉了200行 – user3192948

+0

更新:我在endforeach後試過運行:$ this-> db-> last_query(),結果表示最後一個查詢是:「UPDATE'user' SET'weekday' = 1" 。 – user3192948

回答

0

放線:

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

在foreach以外

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

} 
$this->db->update('user', $data); 
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

+0

也沒有工作。仍然是同樣的問題。 – user3192948

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. 

完成並完成。感謝所有人的幫助。

相關問題