2015-02-12 2 views
1

Это код (я использую CodeIgniter):Массива, разделенные запятые строк

$sql = 'SELECT * FROM foo WHERE bar IN (?)'; 

$query = $this->db->query($sql, array($values)); 

Итак $ значение представляет собой массив строк, которые я хочу добавить в операторе SQL, где «?» является. Когда я пытаюсь это сделать, я получаю ошибку «Преобразование массива в строку». Есть ли способ добавить значения массива $ values ​​в виде разделенных запятыми строк в оператор SQL?

+0

Попробуйте следующее: $ query = $ this-> db-> query ($ sql, im Plode ("", $ значения)); –

+0

, который добавляет их все как одну строку, так что это не сработает – westcoast

+0

Мне нужно, чтобы каждое значение представляло собой отдельную строку, поэтому оно будет работать в инструкции WHERE IN – westcoast

ответ

1

Почему бы вам не использовать простой способ CodeIgniter

$this->db->from('foo'); 
$this->db->where_in('bar',$values); 
$query=$this->db->get(); 

Это будет производить то, что вы точно хотите

Update
Если вы строги с пути вы должны произвести $ SQL таким образом

$sql = 'SELECT * FROM foo'; 
    if(is_array($values)&&sizeof($values)>0) 
    { 
     $sql.=' WHERE bar IN ('; 
     foreach($values as $key=>$value) 
     { 
      if($key==0) 
      { 
       $sql.='?'; 
      } 
      else 
      { 
       $sql.=',?'; 
      } 
     } 
     $sql.=')'; 
    }  

    $query=$this->db->query($sql,$values); 
+0

Я сам создаю запрос, это сложный запрос с объединениями, поэтому я не могу использовать это – westcoast

+0

Я видел ваш обновленный ответ, проблема в том, что у меня есть другие заполнители, кроме массива значений. Что-то вроде этого 'WHERE foo =? AND bar IN (?) 'И' $ query = $ this-> db-> query ($ sql, array ($ value1, $ values)); ' – westcoast

+1

будет работать, если ваши $ value1, $ value в order.You нужно создавать '?' и помнить '?' будет содержать строку not array.as example '$ sql = 'SELECT * FROM foo где bar IN (?,?,?) и id =?'; '$ query = $ this -> db-> query ($ sql, array (1,2,3,4)); 'Он будет производить' SELECT * FROM foo, где bar IN ('1', '2', '3') и id = '4'' –

2

Вы должны передать строку с запятой, разделенной в запросе. для этого implode функция php.

Делай так:

$values = array('bar1', 'bar2', 'bar3'); 
$string = "'".implode("',", $values)."'"; 

Затем передать строку в запросе,

$sql = 'SELECT * FROM foo WHERE bar IN ($string)'; 
$query = $this->db->query($sql); 

echo '<pre>'; print_r($query->result_array()); 

Вы будете данные в переменной $ запроса.

Сообщите мне, если потребуется дополнительная помощь.

+0

Это ответ не работает с моим кодом (с заполнителями), потому что он ускользает от котировок и добавляет косые черты – westcoast

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