MySQL / PHP如何在WHERE子句中包含数组

时间:2015-10-01 13:19:08

标签: php mysql arrays

我知道这个问题已经被问过,但我几乎尝试了所有我能找到的问题,但我仍然得到错误:

  

PHP注意:数组转换为字符串

以及其他错误:

  

PHP注意:尝试获取非对象的属性

我正在尝试实施关注者并制作,以便用户只接收他们关注的人的Feed。这是我一直在尝试使用的代码:

首先,我得到用户关注的所有人(使用单独的branch.$symref.merge查询)

SELECT

由于人员值将包含一个用户列表的简单字符串,如下所示

  

@对待SomeUser,@ otheruser,@哎

我使用以下方法创建了一个数组:

$people = $row['FollowingIDs'];

最后,我执行所有出错的查询:

$followingArray = explode(",", $people);

我已经测试了数组和所有内容以确保数组没有任何问题,我使用了:$sql2 = "SELECT * FROM database.database WHERE SenderID IN (" . implode(",", $followingArray) . ")"; 并且没有问题。

更新:有什么方法我可以说“WHERE SenderID IN('$ followingArray [0]','$ followingArray [1]',...'$ followingArray [LAST INDEX])'” where / in子句

3 个答案:

答案 0 :(得分:1)

$followingArray = explode(",", $people);
$sql = "SELECT * FROM database.database WHERE SenderID IN  (" ;
    $count = 0;
foreach($followingArray as $row=>$value)
{
    if($count==count($followingArray)-1)
    {
        $sql .= "'".$value."'";
    }
    else
    {
        $sql .= "'".$value."',";        
    }

    ++$count;
}
$sql .= ")";

从表格中选择*,其中的数据位于(' a','',' c'' d'); ,这将是查询的最终结果,foreach循环只是将''之间的话。

答案 1 :(得分:0)

我很久以前在stackoverflow上发现了这个,我喜欢它。希望你也会。

//temp array for testing
$array = array('first', 'second', 'third');

// create empty array for the "IN" list
$sql = array();

// Escape user entered strings. Append and prepend the quotes needed for mysql strings

foreach($array as $value)
{
  $sql []= "'". mysql_real_escape_string($value)."'";
}

//implode the array, append commas to the created string, insert the string into the query using sprintf
$sql2 = sprintf("SELECT * FROM database.database WHERE SenderID IN (%s)",implode(',',$sql));


//only run this query if the user entered array is not empty
//otherwise you might get an error
if( count($sql) )
{
  // run the query

}

echo $sql2;

答案 2 :(得分:0)

您只需要在查询中添加单引号,如下所示:

 $sql2 = "SELECT * FROM database.database WHERE SenderID IN  ('" . implode("','", $followingArray) . "')";

说明:

在内爆之前和之后,您应该添加一个单引号,并在昏迷周围添加两个内含单引号的内爆粘合线。这样,所有数组元素都将被单引号引起来,这是SQL中字符串的正确格式。