【发布时间】:2012-11-09 19:21:28
【问题描述】:
我需要在 MySQL 中进行查询。 但是查询需要使用用户选择的选项进行动态查询。
选项有 Day、Month、Year 和 SellerID。
用户将选择是否要按天、月和年查看卖家的销售历史记录。
但是,假设他想查看 2012 年 3 月的所有销售额。他会将 Day 留空,并收到从 3 月 1 日到 3 月 31 日的所有销售额...
也许他将选项Month留空,并设置Day=15和Year=2012,他会得到销售历史从 2012 年全年开始,仅限每月 15 日。
我的程序需要构建一个查询,准确涵盖他想要查看的内容。
问题是:
我真的需要在我的代码中使用数千个 IF 吗?难道没有更好的方法吗?
if( ($day==0) && ($month==0) && ($year>0) ){
$query.="`date`>='{$year}-01-01' AND `date`<='{$year}-12-31'";
}elseif( ($day==0) && ($month>0) && ($year>0) ){
$query.="`date`>='{$year}-{$month}-01' AND `date`<='{$year}-{$month}-31'";
}elseif{
etc...
【问题讨论】:
-
感谢您进行一些错误检查。不过,我建议您考虑SQL Injection 和Prepared Statements。
-
所以您对每个参数都使用了下拉菜单?不是日历小部件?重新考虑一些 UI 可能也会使这更容易。合理的默认设置和良好的界面可能会满足您的需求,而无需在控制器上编写如此多的逻辑。
-
感谢Jason指出SQL注入,我知道它的存在,但我的系统仅供授权人员使用,他们不会搞砸自己的数据库