У меня проблема с фильтрацией таблицы SQL на основе ввода пользователем; Я не могу понять, как сделать его надежным для ряда входов, которые мне нужно разместить.Фильтрация с высокой динамической таблицей
По существу, пользовательский ввод, извлеченный из данных POST, используется для построения массива ($ filterarray) из таблицы SQL, содержащей параметры фильтра. Три столбца вытягиваются в массив из каждой выбранной строки таблицы; столбец 1 - строка, соответствующая имени столбца в SQL-таблице «finaloutputs», столбец 2 содержит оператор сравнения, столбец три - целочисленное значение. Таким образом, если возвращаться последовательно в виде строки, каждая строка массива создает фильтр выбора, такой как «column_x < 10» или «columm_y = 6». $ filterarray может иметь от 1 до 100+ строк, указывая на разные столбцы в finaloutputs и используя любой оператор сравнения.
Запрос, такие как ниже работает отлично:
$cf1 = wombats
$cf2 = “=”
$cf3 = 0
$result = $DBLink->query("SELECT id FROM finaloutputs WHERE $cf1 $cf2 $cf3");
Но это только инъекционные один набор переменных непосредственно. Как я могу это сделать с помощью целого набора параметров? Код должен работать под управлением оператора «и»; возвращаемые результаты должны удовлетворять всем фильтрам.
Кажется, что это должно быть возможно с комбинацией «foreach» и «array_filter» или «unset». Я не могу точно определить, как это сделать на самом деле.
Например, что-то вроде этого (но это работает ...):
//$filterarray contains in each row:
// string matching a column in finaloutputs table ('cf1')
// comparator ('cf2')
// value ('cf3')
$result = $DBLink->query("SELECT * FROM finaloutputs");
$resultarray = $result->fetch_assoc();
foreach ($filterarray as $row){
unset($resultarray[WHERE $row['cf1'] . $row['cf2'] . $row['cf3']]);
}
Я понимаю, что мой первый пример включая на основе фильтра истинно, то второй пример за исключением на основе истинного фильтра. Мне действительно все равно, что я использую - я могу поменять операторы сравнения в соответствии - я просто ищу эффективный код!
Заранее благодарим за любую помощь!
Ааа, конечно. Это действительно должно работать. Я забыл, что содержимое $ sql - это просто строка. Ошибка у новичков, я уверен. Большое спасибо, это именно то, что я искал! – Wavelength