2015-02-12 218 views
1

这是代码(我用笨):阵列以逗号分隔字符串

$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( “”,$值)); – 2015-02-12 07:48:29

+0

,将它们全部添加为一个字符串,所以它不会工作 – westcoast 2015-02-12 07:50:24

+0

我需要每个值都是一个单独的字符串,因此它将在WHERE IN语句中工作 – westcoast 2015-02-12 07:51:46

回答

1

你为什么不使用简单的笨方法

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

这会产生什么你到底想要

更新
如果你严格要求自己的方式,你需要产生$ 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 2015-02-12 08:51:25

+0

我看到你的更新答案,问题是我除了values数组之外还有其他占位符。像这样的'WHERE foo =? AND bar IN(?)'和'$ query = $ this-> db-> query($ sql,array($ value1,$ values));' – westcoast 2015-02-12 09:20:54

+1

它会在你的$ value1,$ value中有效。需要产生'?'并记住'?'会包含字符串而不是array.as举例'$ sql ='SELECT * FROM foo where bar IN(?,?,?)and id =?';'$ query = $ this - > db-> query($ sql,array(1,2,3,4));'它会产生'SELECT * FROM foo where bar IN('1','2','3')and id = '4'' – 2015-02-12 09:27:55

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()); 

你会在$ query变量的数据。

如果需要,请告知我们以获得进一步的帮助。

+0

这答案不能用我的代码(与占位符),因为它是逃避报价,并添加斜线 – westcoast 2015-02-12 08:57:07