PHP массив для предложения SQL «IN»?

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

0

Решение

Поскольку значения являются целыми числами, если вы не заключите в кавычки переменную, запрос будет действительным. Это откроет вам для 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 одно значение, а не три значения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]