PHP SQL “IN” 子句的数组?

PHP array for an SQL “IN” clause?

我正在尝试从数据库中以 html 形式搜索多个卷号,例如在单个字段中搜索 2345,7654,8976 现在 php 我正在尝试

$query = "SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1";

if(isset($_POST['mroll']))
{
$mroll=$_POST['mroll'];
$query.="and roll IN ('$mroll')";
}

但是 $_POST['mroll'] 会像这样 => 2345,7654,8976 对于 sql 我必须像这样引用它们 => '2345','7654','8976' 在查询中使用它之前 请帮忙

由于值是整数,如果您取消引用变量,查询将有效。不过,这会让您接受 SQL 注射。您应该使用参数化查询并将每个值作为占位符传递。尝试类似的东西:

$query = "SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1";
if(isset($_POST['mroll'])) {
     $mroll=$_POST['mroll'];
     foreach(explode(',', $mroll) as $int) {
         $placeholders .= '?, ';
         $params[] = $int; 
     }
     $placeholders = rtrim ($placeholders, ', ');
     $query .= " and roll IN ($placeholders)";
}

演示:https://eval.in/657610

从技术上讲,您可以更改:

$query.="and roll IN ('$mroll')";

$query.="and roll IN ($mroll)";

虽然强烈反对这种方法。

引用时您的查询变为:

SELECT `firstname`, `lastname`, `roll`, `board`, `city` FROM `result` WHERE 1=1and IN ('2345,7654,8976')

这使得 2345,7654,8976 一个值,而不是三个值。