Php 数组到逗号分隔字符串

Php 数组到逗号分隔字符串,php,mysql,codeigniter,Php,Mysql,Codeigniter,这是我使用Codeigniter的代码: $sql = 'SELECT * FROM foo WHERE bar IN (?)'; $query = $this->db->query($sql, array($values)); 所以$values是一个字符串数组,我想将它添加到SQL语句中?是当我尝试此操作时,我得到一个数组到字符串的转换错误。是否有任何方法可以将$values数组的值作为逗号分隔的字符串添加到SQL语句中?您应该在查询中传递逗号分隔的字符串。为此,请使用php

这是我使用Codeigniter的代码:

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

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

所以$values是一个字符串数组,我想将它添加到SQL语句中?是当我尝试此操作时,我得到一个数组到字符串的转换错误。是否有任何方法可以将$values数组的值作为逗号分隔的字符串添加到SQL语句中?

您应该在查询中传递逗号分隔的字符串。为此,请使用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变量中创建数据


如果需要进一步帮助,请告诉我。

您应该在查询中传递逗号分隔的字符串。为此,请使用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变量中创建数据


如果需要进一步帮助,请告诉我。

为什么不使用简单的codeigniter方法

$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);
这将产生你想要的东西

更新 如果您对自己的方式要求严格,则需要以这种方式生成$sql


为什么不使用简单的codeigniter方法

$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);
这将产生你想要的东西

更新 如果您对自己的方式要求严格,则需要以这种方式生成$sql



试试这个:$query=$this->db->query$sql,内爆,,$value;这将它们全部添加为一个字符串,这样它就不会工作了。我需要每个值都是一个单独的字符串,这样它就可以在WHERE-in语句中工作。这个呢?Try:$query=$this->db->query$sql,$values;这是一个数组到字符串的转换:$query=$this->db->query$sql,introde,,$value;这将它们全部添加为一个字符串,这样它就不会工作了。我需要每个值都是一个单独的字符串,这样它就可以在WHERE-in语句中工作。这个呢?Try:$query=$this->db->query$sql,$values;这是一个数组到字符串的转换。我自己在构建查询语句,这是一个带有连接的复杂查询,所以我不能使用它。我看到了你更新的答案,问题是除了值数组之外,我还有其他占位符。类似这样的东西,其中foo=?和栏中的和$query=$this->db->query$sql,数组$value1,$values;如果你的$value1,$value按顺序排列,它将起作用。你需要生产吗?还记得吗?将包含字符串而不是数组。例如$sql='SELECT*FROM foo where bar IN?,?,?id=$query=$this->db->query$sql,数组1,2,3,4;它将产生SELECT*FROM foo,其中bar在'1'、'2'、'3'和id='4'中。谢谢你的工作方式,你看到另一个答案有2票吗?你知道我是如何处理占位符的吗?它不带占位符,但当我使用占位符时,它会在添加了内爆的引号中转义/添加斜杠。另一个答案没有错,这就是他投票的原因。不幸的是,它不符合您的要求。你需要生产吗?使用相同数量的$values大小。你需要使用for loop或array_map或手动或任何其他方式来执行此操作。如果你看到我之前的评论示例和更新答案,你会知道如何执行此操作。我自己正在构建查询语句,这是一个带有连接的复杂查询,因此我无法使用它。我看到了你更新的答案,问题是除了值数组之外,我还有其他占位符。类似这样的东西,其中foo=?和栏中的和$query=$this->db->query$sql,数组$value1,$values;如果你的$value1,$value按顺序排列,它将起作用。你需要生产吗?还记得吗?将包含字符串而不是数组。例如$sql='SELECT*FROM foo where bar IN?,?,?id=$query=$this->db->query$sql,数组1,2,3,4;它将产生SELECT*FROM foo,其中bar在'1'、'2'、'3'和id='4'中。谢谢你的工作方式,你看到另一个答案有2票吗?你知道我是如何处理占位符的吗?它不带占位符,但当我使用占位符时,它会在添加了内爆的引号中转义/添加斜杠。另一个答案没有错,这就是他投票的原因。不幸的是,它不符合您的要求。你需要生产吗?使用相同数量的$values大小。您需要使用for loop或array_map或手动或任何其他方式来执行此操作。如果您看到我以前的注释示例和更新答案,您将了解如何执行此操作。此答案不适用于带有占位符的代码,因为它将转义引号并添加斜杠。此答案不适用于带有占位符的代码,因为它是转义引号和添加斜杠