#php #mysql
#php #mysql
Вопрос:
У меня есть простая база данных MySQL, которую я запрашиваю у PHP. У меня есть пользовательский ввод некоторых ограничений через форму, а затем я хочу вернуть результаты из запроса SELECT на основе ограничений. То, что у меня есть, работает, когда используются оба ограничения. Однако, если одно из ограничений не указано пользователем, запрос SELECT не возвращает результатов, что, я думаю, связано с тем, что он видит переменную ограничения как пустую.
Как мне заставить запрос SELECT использовать ограничение, если оно не пустое, но игнорировать его, если оно пустое?
Вот то, что я пробовал ранее, но это не работает. Я думал, что могу проверить на пустоту и использовать ИЛИ игнорировать его.
$query="SELECT * FROM food_items
WHERE (type IN ('$foodtypes') OR ('$foodtypes') > '')
AND ('$budget' > '' OR cost <= ('$budget'))
";
В этом примере type и cost являются полями в базе данных, а $foodtypes и $budget являются переменными, взятыми из пользовательских вводов.
Спасибо
Комментарии:
1. Создайте запрос динамически и запрашивайте только переданные значения. Вы также, похоже, открыты для SQL-инъекций. Следует использовать параметризованные запросы.
2. и вы, вероятно, хотели это сделать
'$budget' = '' OR cost <= ('$budget')
(и то же самое с foodtypes). (обратите внимание на = вместо > .)3. Примечание: не используйте это слово
constraint
: в SQL оно имеет другое значение.
Ответ №1:
Я думаю, вам следует построить свой запрос по-другому, основываясь на значении ограничений:
$query = "SELECT * FROM food_items WHERE " .
($foodtypes != "" ? "type IN ('$foodtypes')" : "TRUE") . " AND " .
($budget ? "cost <= $budget" : "TRUE") . " AND " .
.. and so on ..
Примечание по безопасности: всегда экранируйте свои строки SQL перед использованием (см. mysqli_real_escape_string).