Php 如何在一个查询中搜索多个用户名
我想在我的数据库中搜索一些用户名,如下->Php 如何在一个查询中搜索多个用户名,php,mysql,Php,Mysql,我想在我的数据库中搜索一些用户名,如下-> $skip = $_POST['username']; $_SESSION['skip_user'] = array(); array_push($_SESSION['skip_user'],$skip); $str = $_SESSION['skip_user']; $string = rtrim(implode(',', $str), ','); 现在字符串变量看起来像“name1,name2,name3” 这会获取用户,但我不想要这些用户。我的
$skip = $_POST['username'];
$_SESSION['skip_user'] = array();
array_push($_SESSION['skip_user'],$skip);
$str = $_SESSION['skip_user'];
$string = rtrim(implode(',', $str), ',');
现在字符串变量看起来像“name1,name2,name3”
这会获取用户,但我不想要这些用户。我的意思是,我可以在哪里写where username!在({$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'
您应该使用
NOT IN
排除某些值
mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ('name1', 'name2') ORDER BY id DESC");
您应该使用
NOT IN
排除某些值
mysqli_query($db, "SELECT * FROM users WHERE username NOT IN ('name1', 'name2') ORDER BY id DESC");
请尝试在SQL查询中的中不使用 不过,首先尝试在sql查询的
部分而不是部分尝试的值中添加引号
$str = '';
foreach ($_SESSION['skip_user'] AS $word) {
$str .= "'$word',";
}
$str = rtrim($str, ',');
然后在查询中使用此$str
。另外,试着养成一种习惯,不使用``作为列名,如下所示:
SELECT `SOMETHING` FROM `TABLE_NAME` WHERE <CONDITION>
从'TABLE_NAME'中选择'SOMETHING'
我希望这有帮助 在SQL查询中尝试不在
中
不过,首先尝试在sql查询的部分而不是部分尝试的值中添加引号
$str = '';
foreach ($_SESSION['skip_user'] AS $word) {
$str .= "'$word',";
}
$str = rtrim($str, ',');
然后在查询中使用此$str
。另外,试着养成一种习惯,不使用``作为列名,如下所示:
SELECT `SOMETHING` FROM `TABLE_NAME` WHERE <CONDITION>
从'TABLE_NAME'中选择'SOMETHING'
我希望这有帮助 是的,只需键入“not”而不是“!”
从垃圾不在的表中选择*('item1','item2','item3')
1) 虽然您没有在内爆中添加引号,但您还有一些其他问题:
// 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();
是的,只要输入“不是”而不是“!”
从垃圾不在的表中选择*('item1','item2','item3')
1) 虽然您没有在内爆中添加引号,但您还有一些其他问题:
// 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();
我在查询中收到一个错误。mysqli_query($db,“从用户名不按id DESC({$string})顺序排列的用户中选择*)或die(mysqli_error($db));php在“where子句”@SagarSingh中给出错误未知列“name1”-由于缺少引号,请阅读我的答案以获得解决方案。您仍然可以使用内爆无理由loop@Pamblam我可以用它来使用和查询吗?像这样->其中用户名不在({$string})中,id不在({$id})中
是的,这也是有效的SQL,只要{$id}
包含格式正确的字符串!我在查询中收到一个错误。mysqli_query($db,“从用户名不按id DESC({$string})顺序排列的用户中选择*)或die(mysqli_error($db));php在“where子句”@SagarSingh中给出错误未知列“name1”-由于缺少引号,请阅读我的答案以获得解决方案。您仍然可以使用内爆无理由loop@Pamblam我可以用它来使用和查询吗?像这样->其中用户名不在({$string})中,id不在({$id})中
是的,这也是有效的SQL,只要{$id}
包含格式正确的字符串!您正在寻找'WHERE NOT IN()``功能您正在寻找'WHERE NOT IN()``功能