MYSQLI - 数组中的位置

MYSQLI - WHERE IN array

我在互联网上到处寻找这个问题的答案,然后出现了准备好的语句和绑定参数(我不知道那是什么东西)

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

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

UNDEFINED VARIABLE

为什么?我看不出代码有什么问题。如果我输入一个特定的值,它就会工作,并且我已经用 WHERE stuff=$item 测试了它 - 工作正常。

所以不是变量/数据库的问题,是IN语句的错误。我不明白为什么它不起作用。

每个元素都需要引号

$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).")";

我怀疑只要查询没有 return 行,您就会得到那个未定义的变量。我们看不到变量在任何地方都是 defined/initialized 除了在获取一行之后。

至于为什么查询没有 return 行,您的查询等同于

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

这是一个单一的字符串文字。如果列内容等于该字符串,则查询只会转到 return 行。该字符串中的逗号只是值的一部分。如果您想查找 stuff 包含任何值的行,您的查询需要采用以下形式:

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

请注意,这是三个单独的字符串文字,以逗号分隔。逗号是 SQL 语句的一部分,而不是值的一部分。这将 return 列内容包含 'food' 的行。或者 'drink'。或者 'cooking'.

这就是您查询 "doesn't work" 的原因。