2012-10-12 173 views
0

我想從我的數據庫中獲取一些數據與活動記錄,我有以下問題。我想學習如何使用活動記錄來做到這一點,因爲在這段代碼後,我有很多連接和其他的東西。否則,我會寫一個正常的查詢。db活動記錄

 $this->db->where("sa.country", $country); 


     // I NEED TO OPEN BRACKETS HERE SO THAT I CAN GET THE LANGUAGES IF THERE IS DATA IN ONE OF THE ARRAYS 


     if (isset($lid[0]))$this->db->where("sa.lang", $lid[0]); 
     if (isset($lid[1]))$this->db->or_where("sa.lang", $lid[1]); 
     if (isset($lid[2]))$this->db->or_where("sa.lang", $lid[2]); 
     if (isset($lid[3]))$this->db->or_where("sa.lang", $lid[3]); 
     if (isset($lid[4]))$this->db->or_where("sa.lang", $lid[4]); 


     //AND CLOSE THEM HERE 

我的目標是從數據庫中獲取一個特定的國家以及數組中相應的語言。

回答

0

我想你應該使用WHERE...IN...!請參閱幫助about 'where in'

用ActiveRecord:

$this->db->where_in("sa.lang",$lid); 
+0

剛剛嘗試過。清潔和工作很好,謝謝! – Ando

+0

不客氣! – uzsolt

0

這有幫助嗎?

$this->db->where("sa.country", $country); 

// loop through *set* languages 
foreach($lid as $item) 
{ 
    $this->db->where('sa.lang', $item); 
} 

// will return a query object 
return $this->db->get('my_table'); 
+0

不,問題是不能在陣列中,一個問題是關於SQL表達式。 – Ando

+0

「我的目標是從db中獲取一個特定的國家,並使用陣列中的相應語言。」 我想你想要做的是說'''''''''''''''''準確地說是 –

+0

。你的例子產生以下查詢:WHERE sa.country = $ country AND sa.lang = language1 AND sa.lang = language2/* etc ... * /)' – Ando

0

下面是我如何解決問題的任何人對解決方案感興趣。

$this->db->where("(`sa`.`lang` = '$lid[0]' OR `sa`.`lang` = '$lid[1]' OR `sa`.`lang` = '$lid[2]' OR `sa`.`lang` = '$lid[3]' OR `sa`.`lang` = '$lid[4]')"); 
+2

這是一個糟糕的解決方案,並且傾向於SQL注入(除非在此部分之前在某處確認輸入)。您應該從[documentation](http://codeigniter.com/user_guide/database/active_record.html) – Repox

+0

檢查'where_in()'方法感謝您的評論。該數組來自數據庫,因爲我在帖子中說,所以我相信不能有注射。除了使用帶有啓用XSS的codeigniter助手生成輸入字段時,應該注意sql注入。沒有? – Ando

+0

如果您看到CI的更新日誌,您會注意到XSS清理已多次更新(針對錯誤和改進)。你不應該單獨依靠這個功能。在數據庫中使用它之前,請始終使用預先準備好的語句,或至少避開動態輸入(無論它來自何處)。 – Repox