【问题标题】:Select from database where a column equals any value in a variable从数据库中选择列等于变量中的任何值
【发布时间】:2018-03-09 17:56:18
【问题描述】:

我的数据库如下所示:

我有一个看起来像这样的变量:

$following = "John, Sarah";

我想获取变量 $following 中列“用户名”所在的行(在本例中为 John 和 Sarah)。为此,我查看了答案https://stackoverflow.com/a/1356018/5798798,它建议我在我的查询中使用IN,我已经尝试过:

$following = "John, Sarah";
$stmt = $con->prepare("SELECT * FROM events WHERE username IN ('$following')");
$stmt->execute();
while($row = $stmt->fetch()) {
   echo $row['eventtype'];
}

问题是查询没有返回数据。我想要的结果是:

辐条走

【问题讨论】:

  • 据我所知,您没有选择回显行中的 eventtype 列。
  • 哦,所以改变了。
  • echo $following = join("', '", $following); - 告诉我这显示了什么。我不知道你是如何构建你的数组的,但这应该会让你失望,因为单引号......也许。 @TheCodesee
  • @FunkFortyNiner 实际上我最初有一个字符串......但现在我意识到我正在将一个字符串转换为一个数组,只是将它转换回一个字符串。字符串只是John, Sarah 我将编辑我的问题
  • $following = array("John", "Sarah"); echo $following = join(", ", $following); 这是为我制作的 John, Sarah @TheCodesee 如果这就是你要找的东西。但我可能错了。

标签: php arrays list


【解决方案1】:

根据我在 cmets 中的建议使用以下内容:

$following = "John, Sarah"; 
$following = explode(", ", $following); 
$string = implode(", ", $following); 

最后我没有包含 implode()'ing 的引号。

最终的解决方案是在implode()函数的第一个参数中添加单引号:

$following = implode("','",$following);

【讨论】:

    【解决方案2】:
    $following = join("', '", $following);
    

    join 不再返回数组。现在是一个字符串。


    你可以使用this:

    $in  = str_repeat('?,', count($following ) - 1) . '?';
    $stmt = $con->prepare("SELECT * FROM events WHERE username IN ($in)");
    $stm->execute($following);
    

    【讨论】:

    • @TheCodesee 如果您使用占位符 (?),如此处的第二个示例所示,您需要将值数组传递给 execute,例如 $stmt->execute($following);,或者绑定在执行之前单独的值。
    • @Don'tPanic 是的,我认为 OP 会从链接中找到。更新了!
    • @Thamilan 好吧,我只是猜测这就是他们说它没有返回任何东西的原因。不过谁知道呢。 :)
    【解决方案3】:

    不使用 join 直接通过以下方式内爆数组

    $stmt = $con->prepare('SELECT * FROM events WHERE username IN ("'. implode('","', $following).'")');
    $stmt->execute();
    while($row = $stmt->fetch()) {
       echo $row['eventtype'];
    }
    

    注意:$following 总是在数组中

    【讨论】:

    • 本声明开头缺少单引号'SELECT
    • @FunkFortyNiner,谢谢你指出错误,我更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多