2013-02-20 2 views
0

У меня есть массив значений, который я хочу проверить с помощью функции mysql IN(), но как его использовать с помощью codeigniter?с использованием функции mysql in()

Это то, что я сейчас делаю, что явно не работает.

$p = array('page1', 'page2', 'page3','page4', 'page5'); 
$pages = implode(",", $p); 

$sql = "select page from pages where domains_id = ? and page in(?) and is_deleted=0"; 
$fields = array($domains_id, $pages); 

$this->db->query($sql, $fields) 

the output of the pages variable comes out to page1,page2,page3,... but the in function needs them seperated like this: 
'page1','page2','page3'.... 

ответ

1
<?php 
function addQuotes($string) 
{ 
    return "'{$string}'"; 
} 
$p = array('page1', 'page2', 'page3','page4', 'page5'); 
$p2 = array_map("addQuotes", $p); 

print_r($p2); 

See it in action

Вы можете использовать implode() нормально.

0

Начнет с внешними котировками взрываются с ','

$pages = sprintf("'%s'", implode("','", $p)); 
+0

Не будет ли это оставить заявку уязвимой для SQL инъекций ? – MikeB

+0

@MikeB - зависит от того, где $ p исходит от – Galen

+0

Это означает, что вам нужно проследить его, а не делать это безопасным способом и быть уверенным, что это правильно. Кажется, ловушка. – MikeB

0

Попробуйте это:

$p = array('page1', 'page2', 'page3','page4', 'page5'); 
$this->db->select('page'); 
$this->db->from('pages'); 
$this->db->where('domains_id', $domains_id); 
$this->db->where_in('page', $p); 
//Note where_in function expects 2nd parameter as array 
$this->db->where('is_deleted', '0'); 

$query = $this->db->get(); 

Для получения более подробной информации: http://ellislab.com/codeigniter/user-guide/database/active_record.html

Смежные вопросы