我试图在数据库中使用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我必须像这样引用它们=> #&39; 2345'' 7654'' 8976' 在查询中使用它之前 请帮忙。
答案 0 :(得分:1)
如果取消引用变量,则值为整数,查询将有效。这将打开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
成为一个值,而不是三个值。