Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQLI-数组中的位置_Php_Mysql_Mysqli_Where - Fatal编程技术网

Php MYSQLI-数组中的位置

Php MYSQLI-数组中的位置,php,mysql,mysqli,where,Php,Mysql,Mysqli,Where,我在互联网上到处寻找这个问题的答案,然后出现了准备好的语句和绑定参数(我不知道那是什么东西) 基本上,我有一个逗号分隔的列表 $list = 'food, drink, cooking'; 好的,现在我想在数据库的一列中搜索这些项中的每一项。。。听起来很简单,对吧 $query = "SELECT * FROM table WHERE stuff IN ('$list')"; $runquery = mysqli_query($connection, $query); while($row =

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

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

$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);
未定义变量

为什么??我看不出密码有什么问题。如果我输入一个特定的值,它就可以工作,我已经用
测试过了,其中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).")";

每个元素都需要加引号

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

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

至于查询不返回行的原因,您的查询相当于

   ... WHERE stuff = 'food, drink, cooking'
这是一个单字符串文本。如果列stuff等于该字符串,则查询只返回行。该字符串中的逗号只是值的一部分。如果要查找stuff包含任何值的行,则查询的形式必须为:

   ... WHERE stuff IN ('food','drink','cooking')
请注意,这是三个单独的字符串文字,用逗号分隔。逗号是SQL语句的一部分,而不是值的一部分。这将返回stuff列包含“food”的行。或者“喝”。或者“烹饪”


这就是为什么您的查询“不起作用”的原因。

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

至于查询不返回行的原因,您的查询相当于

   ... WHERE stuff = 'food, drink, cooking'
这是一个单字符串文本。如果列stuff等于该字符串,则查询只返回行。该字符串中的逗号只是值的一部分。如果要查找stuff包含任何值的行,则查询的形式必须为:

   ... WHERE stuff IN ('food','drink','cooking')
请注意,这是三个单独的字符串文字,用逗号分隔。逗号是SQL语句的一部分,而不是值的一部分。这将返回stuff列包含“food”的行。或者“喝”。或者“烹饪”


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

数组方法不起作用。最简单的事情,该死!谢谢,这完美地解决了这个问题-谢谢大家的评论@PHPlearnerproject您必须意识到,这段代码与完美无关,因为它本质上易于SQL注入。没有来自输入的变量。在这种情况下,它不是。比如,你将如何注入到这段代码中??只是好奇?我想问的是,变量来自哪里并不重要。Prepared语句必须无条件使用。数组方法不起作用。最简单的事情,该死!谢谢,这完美地解决了这个问题-谢谢大家的评论@PHPlearnerproject您必须意识到,这段代码与完美无关,因为它本质上易于SQL注入。没有来自输入的变量。在这种情况下,它不是。比如,你将如何注入到这段代码中??只是好奇?我想问的是,变量来自哪里并不重要。准备好的报表必须无条件使用。