Ищите mySQL с PHP, используя подстановочный знак WHERE или оператор IF? - PullRequest
1 голос
/ 03 июля 2010

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

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

Я хочу, чтобы пользователь мог искать «все города», поэтому я бы хотел удалить оператор WHERE, если $ city ==«все города»;или используйте подстановочный знак для оператора WHERE, который соответствует всем городам в БД.

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

Ответы [ 4 ]

2 голосов
/ 03 июля 2010

Ну, вы все равно можете иметь только один запрос и динамически создавать предложение 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");
0 голосов
/ 03 июля 2010

, хотя это и не PHP-программист, этот псевдокод может предложить опцию ... условно построить предложение where.Кроме того, я бы сделал это с параметризованными запросами вместо прямого построения строк, чтобы предотвратить атаки 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 голосов
/ 03 июля 2010

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

WHERE City like '$city'

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

0 голосов
/ 03 июля 2010

В одном случае можно использовать оператор case:

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

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

WHERE City = City

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

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

...