Поисковый MySQL с PHP, с помощью, ГДЕ подстановочный знак или оператор IF?

Я позволяю пользователям искать мою базу данных данные городом. Мой запрос похож:

$results = mysql_query("SELECT * FROM mydb WHERE City='".$city."' LIMIT 10");

Я хочу, чтобы пользователь смог искать 'все города', таким образом, я хотел бы любому, удаляют ГДЕ оператор если $city == 'все города'; или используйте подстановочный знак для, ГДЕ оператор, который соответствует всем городам в дб.

Я раньше имел оператор IF, который переключился между двумя запросами, но я хочу добавить больше фильтров как страны страны/всей, индексы индекса/всего, и т.д., Таким образом, я сохранил бы один динамический SQL-запрос.

1
задан Adam Tal 3 July 2010 в 11:33
поделиться

4 ответа

Что ж, у вас все еще может быть только один запрос и динамическое построение предложения where, как таковое:

$where = '';

// conditional statements (if/else, switch) for populating the where clause
$where .= " WHERE City = '{$city}'";
$where .= " AND Country = '{$country}'";

$results = mysql_query("SELECT * FROM mydb{$where} LIMIT 10");
2
ответ дан 2 September 2019 в 23:20
поделиться

Одним из способов может быть оператор case:

WHERE City = case when '$city' = 'All cities' then City else '$city' end

Если пользователь ищет «Все города», это превращает оператор WHERE в:

WHERE City = City

Что всегда верно (по крайней мере, для ненулевые города;))

PS Убедитесь, что вы выполняете эти запросы, используя учетную запись MySQL, доступную только для чтения. Пользователь мог вводить забавные вещи в параметр $ city !

0
ответ дан 2 September 2019 в 23:20
поделиться

Вы можете попробовать

WHERE City like '$city'

и разрешить пользователям вводить подстановочные знаки, если вы думаете, что они готовы к этому.

0
ответ дан 2 September 2019 в 23:20
поделиться

хотя я не программист PHP, этот псевдокод может предложить вариант... условно построить ваш where clause. Кроме того, я бы сделал это с параметризованными запросами вместо прямого построения строк, чтобы предотвратить атаки sql-инъекции.

cYourSQL = "select * from YourTable where "

cAndRequired = ""

if city is NOT "all cities"
  cYourSQL = cYourSQL + cAndRequired + " city = 'YourParameterValueProvided' "
  cAndRequired = " AND "
endif

Теперь всегда добавляйте выбор страны

cYourSQL = cYourSQL + cAndRequired + " country = 'YourCountryValue' LIMIT 10 " 

Выполните запрос

0
ответ дан 2 September 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: