【问题标题】:how to search multiple username in a single query如何在单个查询中搜索多个用户名
【发布时间】:2016-09-03 10:49:20
【问题描述】:

我想像这样在我的数据库中搜索一些用户名->

$skip = $_POST['username'];
$_SESSION['skip_user'] = array();
array_push($_SESSION['skip_user'],$skip);
$str = $_SESSION['skip_user'];
$string = rtrim(implode(',', $str), ',');

现在字符串变量看起来像 "name1, name2, name3";

mysqli_query($db, "SELECT * FROM users WHERE username in ({$string}) ORDER BY id DESC");

这会获取用户,但我不想要这些用户。我的意思是有什么问题我可以写WHERE username !in ({$string})

获取除“name1,name2,name3”这些用户之外的所有用户

现在添加 NOT IN 后我收到错误

mysqli_query($db, "SELECT * FROM users  WHERE username NOT IN ({$string}) ORDER BY id DESC")or die(mysqli_error($db)); php is giving error Unknown column 'name1' in 'where clause'

【问题讨论】:

  • 您正在寻找 `WHERE NOT IN ()`` 功能

标签: php mysql


【解决方案1】:

在 SQL 查询中尝试NOT IN

首先,尝试在 sql 查询的 NOT IN 部分中为您尝试的值添加引号。

$str = '';
foreach ($_SESSION['skip_user'] AS $word) {
    $str .= "'$word',";
}
$str = rtrim($str, ',');

然后在您的查询中使用这个$str。另外,尝试养成使用 `` 作为列名的习惯,如下所示:

SELECT `SOMETHING` FROM `TABLE_NAME` WHERE <CONDITION>

希望对你有帮助!

【讨论】:

  • 我在查询中收到错误消息。 mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ({$string}) ORDER BY id DESC")or die(mysqli_error($db)); php在'where子句'中给出错误未知列'name1'
  • @SagarSingh - 由于缺少引号,请阅读我的解决方案答案。
  • 你仍然可以使用 implode no reason to loop
  • @Pamblam 我也可以使用 AND 查询吗?像这样-> WHERE username NOT IN ({$string}) AND id NOT IN ({$id})
  • 是的,这也是有效的 SQL,只要 {$id} 包含格式正确的字符串!
【解决方案2】:

您应该使用NOT IN 排除某些值。

mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ('name1', 'name2') ORDER BY id DESC");

【讨论】:

    【解决方案3】:

    是的,只需输入“not”而不是“!”

    select * from table where junk not in ('item1', 'item2', 'item3');

    1) 尽管您没有在 implode 中添加引号,但您还有其他一些问题:

    // you need quotes here
    $string = implode("','", $str);
    // And here
    mysqli_query($db, "SELECT * FROM users WHERE username in ('{$string}') ORDER BY id DESC");
    

    然而,这是你应该真正做的。

    2) 当您对 SQL 注入开放时,您应该绑定您的参数:

    $params = array();
    $params[0] = "";
    $sql = "SELECT * FROM users WHERE username NOT IN (";
    foreach($str as $s){
        $params[0] .= "s";
        array_push($params, $s);
        $sql .= "?, ";
    }
    $sql = rtrim($sql, " ,").") ORDER BY id DESC";
    
    $stmt = $conn->prepare($sql);
    
    // this is the same as doing: $stmt->bind_param('s', $param);
    call_user_func_array(array($stmt, 'bind_param'), $params);
    
    // execute and get results
    $stmt->execute();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2017-04-15
      • 2016-06-29
      • 1970-01-01
      • 2022-08-22
      • 2012-03-12
      相关资源
      最近更新 更多