я пытаюсь найти несколько номеров роллов из базы данных с помощью 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
одно значение, а не три значения.
Других решений пока нет …