【问题标题】:MYSQLI - WHERE IN array [duplicate]MYSQLI - 数组中的位置[重复]
【发布时间】:2016-03-26 21:38:46
【问题描述】:

我已经在整个互联网上寻找关于这个问题的答案,并且准备好的语句和绑定参数出现了(我不知道那是什么东西)

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

$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 语句中的错误。我不明白为什么它不起作用。

【问题讨论】:

    标签: php mysql mysqli where


    【解决方案1】:

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

    至于查询为什么不返回一行,你的查询相当于

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

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

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

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

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

    【讨论】:

      【解决方案2】:

      每个元素都需要引号

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

      【讨论】:

      • 数组方法不行。
      • 最简单的事情,该死!谢谢,这完美地解决了问题 - 感谢所有评论的人!
      • @PHPlearnerproject 你必须意识到这段代码与完美无关,因为它本质上很容易被 SQL 注入。
      • 我的意思是另一种 SQL 注入方式。没有来自输入的变量。在这种情况下不是。就像您将如何注入此代码一样?只是好奇?我合法地问
      • 变量来自哪里并不重要。准备好的语句必须无条件使用。
      猜你喜欢
      • 2020-02-18
      • 2013-07-18
      • 1970-01-01
      • 2014-10-15
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多