Итак, у меня есть некоторые данные, поступающие через POST из формы с большим количеством флажков, и я пытаюсь найти записи в базе данных, соответствующие отмеченным параметрам. Есть четыре набора флажков, каждый из которых отправляется в виде массива. Каждый набор флажков представляет один столбец в базе данных, а значения из флажков сохраняются в виде строки с разделителями-запятыми. Значения, которые я ищу, не обязательно будут последовательными, поэтому вместо одного LIKE %value% я думаю, что мне нужно разбить его на серию операторов LIKE, соединенных с помощью AND. Вот что у меня есть:
$query = "";
$i = 1;
$vals = [];
foreach($_POST["category"] as $val){
$query .= "category LIKE :cat".$i." AND ";
$vals[":cat".$i] = "%".$val."%";
$i++;
}
$i = 1;
foreach($_POST["player"] as $val){
$query .= "player LIKE :plyr".$i." AND ";
$vals[":plyr".$i] = "%".$val."%";
$i++;
}
$i = 1;
foreach($_POST["instrument"] as $val){
$query .= "instrument LIKE :inst".$i." AND ";
$vals[":inst".$i] = "%".$val."%";
$i++;
}
$i = 1;
foreach($_POST["material"] as $val){
$query .= "material LIKE :mat".$i." AND ";
$vals[":mat".$i] = "%".$val."%";
$i++;
}
$query = rtrim($query, " AND ");
$tubas = R::convertToBeans("tuba", R::getAll("SELECT * FROM tuba WHERE ".$query, $vals));
Кажется, это работает в моем предварительном тестировании, но лучший ли это способ сделать это? Будет ли это безопасно от SQL-инъекций? Спасибо!