2012-10-12 133 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