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)";
}
从技术上讲,您可以更改:
$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
一个值,而不是三个值。
我正在尝试从数据库中以 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)";
}
从技术上讲,您可以更改:
$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
一个值,而不是三个值。