2013-05-08 40 views
1

我在我的CodeIgniter,我試圖通過參數綁定下面的查詢。CodeIgniter - 查詢綁定「IN」參數

$q = "SELECT * FROM my_table WHERE id IN (?)" 
$ids = "1,2,3,4"; 
$this->db->query($q, array($ids)); 

由於查詢綁定將$ ids當作字符串處理,因此上述操作無效。我如何參數化我的查詢,但仍然能夠執行「IN」操作?我不得不使用「原始SQL查詢」。上面的查詢只是一個更大+複雜查詢的一部分,我無法使用ActiveRecord。另外我使用Postgres。

+0

也許['FIND_IN_SET()'](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find- in-set)?只是一種解決方法,如果沒有提供合適的答案。 – BlitZ 2013-05-08 09:15:41

+0

@ericbae我已經更新了我的答案檢查。 – 2013-05-08 09:32:15

+0

@ericbae是你用單引號括住$ id嗎???在查詢中? – 2013-05-08 09:33:18

回答

0

試試這個代碼:

$ids = "('1','2','3','4')"; 
$q = "SELECT * FROM my_table WHERE id IN ".$ids; 
$this->db->query($q); 

你應該使用

$ids = array('1','2','3','4'); 
$this->db->where_in('id', $ids); 

where_in在codignitor使用。

+0

我不認爲這會消毒參數$ ids並阻止SQL注入。 – ericbae 2013-05-08 09:35:36

+0

@ericbae如果你與sql注入有緣,那麼爲什麼要使用查詢來執行,並且在codignitor中使用了PDO,所以很酷。 – 2013-05-08 09:37:58

2

相反串的把它放在陣列

$q = "SELECT * FROM my_table WHERE id IN (?)" 
$ids = array(1,2,3,4); 
$this->db->query($q, $ids); 

可以實現這樣的同樣的事情,而不結合

替代

$ids = array(1,2,3,4); 
$this->db->where_in('id',$ids); 
$this->db->get('my_table'); 
+0

我收到了一個錯誤 - 它將它解釋爲字符串「Array」 - 錯誤「id IN(Array)」 – ericbae 2013-05-08 09:26:32

0

與試試這個where_in

$ids = array(1,2,3,4); 
$this->db->select('*'); 
$this->db->from('my_Table'); 
$this->db->where_in('id',$ids); 
0

使用FIND_IN_SET這樣

select * from table where FIND_IN_SET('$ids', id); 
0

$ids = "1,2,3,4"; 
$a = array($ids); 
//$a[0] = "1,2,3,4"; 

//not $a[0]=1;$a[1]=2;$a[2]=3;$a[3]=4; 

想保持你的風格

$ids = "1,2,3,4"; 
$a = explode(",",$ids); 
0
$q = "SELECT * FROM my_table WHERE id IN ?" 
$ids = "1,2,3,4"; 
$this->db->query($q, explode(",", $ids));