我让用户按城市搜索我的数据库中的数据。 我的查询如下:
$results = mysql_query("SELECT * FROM mydb WHERE City='".$city."' LIMIT 10");
我希望用户能够搜索“所有城市”,所以如果$ city =='所有城市',我想删除WHERE语句;或者使用通配符作为匹配数据库中所有城市的WHERE语句。
我以前有一个在两个查询之间切换的IF语句,但我想添加更多过滤器,如国家/所有国家/地区,zipcode /所有zipcodes等,所以我宁愿保留一个动态SQL查询。
答案 0 :(得分:2)
好吧,您仍然可以只有一个查询并动态构建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");
答案 1 :(得分:0)
一种方式是案例陈述:
WHERE City = case when '$city' = 'All cities' then City else '$city' end
如果用户正在搜索“所有城市”,则会将WHERE语句转换为:
WHERE City = City
总是如此(至少对于非零城市;))
P.S。确保使用只读MySQL帐户运行这些查询。用户可以在$city
参数中输入有趣的内容!
答案 2 :(得分:0)
你可以尝试
WHERE City like '$city'
并允许用户输入通配符,如果您认为他们可以使用它。
答案 3 :(得分:0)
虽然不是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 "
运行查询