2012-08-27 63 views
2

我再次發現自己處於stackoverflow社區的擺佈!在CodeIgniter中更新數組數據庫字段

我已經過去爲我的PHP項目使用CodeIgniter,到目前爲止一直很輕鬆,但是我一直試圖用一些發佈數據更新數據庫字段。

我的數組是通常的:array(name => value,name => value,name => value); 再次從提交的$ _POST數據中填充。

類似於陣列,我有2個字段的數據庫表:設置,其中以名稱設置對應於所述陣列的鍵和值數組鍵值。

(難道我是正確的解釋?)

儘管如此,我一直在嘗試了一小會兒,現在得到這個,因爲它應該工作,但是,我真的只是揮舞着我的手在左右黑暗。

我希望你們中的一些人能夠在這個煩人的問題上幫助我!

編輯:

謝謝大家誰回答!我設法生產,我想用下面的代碼的結果:

foreach ($form_data as $key => $val) 
    { 
     $this->db->where ('setting', $key); 
     $this->db->set ('value', $val); 
     $this->db->update ('recruitment'); 
    } 

現在,我試圖通過添加以下了這一點:

if ($this->db->affected_rows() >= '1') { return true; } 
    return false; 

爲了我的模型,並

 if ($this->RecruitmentSettings->Update($form_data) == TRUE) 
     { 
      redirect('recruitment/success'); 
     } 

給我的控制器,但它沒有像預期的那樣工作。任何想法我做錯了什麼?

+1

向我們顯示您的代碼 – Samson

回答

2

有很多的問題在這裏。你已經有數據庫中的值,你想更新它們嗎?或者你想每次都輸入新的數據?答案依賴於此。

你想要的是insert_batch()update_batch()活動記錄類的方法(如果這就是你使用的數據庫)。

foreach($post_array as $key => $value) 
{ 
    $settings[] = array(
     'setting' => $key, 
     'value' => $value 
    ); 
} 

$this->db->insert_batch('your_db_table', $settings); 

OR,更新:

$this->db->update_batch('your_db_table', $settings, 'setting'); 

你可以做一個查詢來檢查設置,並根據做,如果有結果的insert_batchupdate_batch。如果你想每次插入,你可以在插入之前刪除表中的行。但是,如果沒有交易,我不會這麼做。

+0

我試過這個方法,但它產生了錯誤_「你必須指定一個索引來匹配批量更新。」_我真的不明白。嗯。 – Nieeru

+0

請參閱http://localhost/user_guide/database/active_record.html#update。 'update_batch'需要第三個參數,它是'where'子句...(匹配的索引)。在這種情況下,將其設置爲'setting':'$ this-> db-> update_batch('your_db_table',$ settings,'setting');' – Brendan

+0

就是這樣!它工作完美。與上面添加的affected_rows()代碼一起,這是我的需求的完美解決方案。 – Nieeru

0

所以你想存儲數據庫中的數據?你可以這樣做

型號

foreach ($data as $key => $item) 
{ 
     $this->db->set ('setting', $key); 
     $this->db->set ('value', $item); 
     $this->db->insert ('table_name'); 
} 
return ($this->db->affected_rows() > 0); 

控制器

if ($this->RecruitmentSettings->Update($form_data)) 
{ 

redirect('recruitment/success'); 
} 
else 
{ 
    echo "error"; 
} 
+0

這不起作用,因爲您沒有使用對象。您需要執行foreach($ data爲$ key => $ value),然後使用$ key進行設置,使用$ value進行設置。看到我的答案。箭頭符號不適用於數組AFAIK。你會遇到「試圖訪問非對象的屬性」的錯誤。 – Brendan

+0

謝謝 - 我修復了我的代碼 - 它現在可以工作 – Laurence

+0

實際上,如果你想讓它工作,你需要在主陣列中做子陣列。即'array(array('name'=> name,'value'=> value),array('name'=> name,'value'=> value))'等等。但是,你可以使用'foreach($ array作爲$ key => $ value)' – Brendan