MYSQLI - WHERE IN数组

时间:2016-03-26 21:38:46

标签: php mysql mysqli where

我已经在互联网上查看了这个问题的答案,准备好的陈述和绑定参数(我不知道那些东西是什么)

基本上,我有一个以逗号分隔的列表

$list = 'food, drink, cooking';

好的,现在我想在数据库的一列中搜索每个项目...听起来很简单,对吧?

$query = "SELECT * FROM table WHERE stuff IN ('$list')";
$runquery = mysqli_query($connection, $query);
while($row = mysqli_fetch_array($runquery,MYSQLI_ASSOC)){
    $variable = $row;
}

然后,

var_dump($variable);
  

未定义的变量

为什么呢?我无法看到代码有什么问题。如果我输入一个特定的值,并且我用WHERE stuff=$item测试它 - 它工作正常。

所以它不是变量/数据库,它是IN语句中的错误。我不明白为什么它不会工作。

3 个答案:

答案 0 :(得分:5)

每个元素都需要它周围的引号

$list = "'food', 'drink', 'cooking'";
$query = "SELECT * FROM table WHERE stuff IN ($list)";

或者如果你有一个数组

$array = array("food","drink","cooking");
$query = "SELECT * FROM table WHERE stuff IN (".implode(',', $array).")";

答案 1 :(得分:1)

我怀疑只要查询没有返回一行,你就会获得UNDEFINED VARIABLE。我们没有看到变量是在任何地方定义/初始化的,除非在获取一行之后。

至于查询不返回行的原因,您的查询等同于

   ... WHERE stuff = 'food, drink, cooking'

这是一个字符串文字。如果列的内容等于该字符串,则查询仅返回行。该字符串中的逗号只是值的一部分。如果要查找包含任何值的行,则查询的格式必须为:

   ... WHERE stuff IN ('food','drink','cooking')

请注意,这是三个单独的字符串文字,以逗号分隔。逗号是SQL语句的一部分,而不是值的一部分。这将返回列内容包含“食物”的行。或者'喝'。或'烹饪'。

这就是你的查询“不起作用”的原因。

答案 2 :(得分:-2)

您的列表是$list = 'food, drink, cooking';。但您无法将其粘贴到WHERE IN。你应该准备它:爆炸$list字符串,然后用适当的引号将其内爆并传递给IN子句。

试试这段代码:

$list = 'food, drink, cooking';
$listArray = array_map('trim', explode(',', $list));
$listWhere = "('".implode("','", $listArray)."')";

$query = "SELECT * FROM table WHERE stuff IN ".$listWhere;
$runquery = mysqli_query($connection, $query);
while($row = mysqli_fetch_array($runquery,MYSQLI_ASSOC)){
  $variable = $row;
}