用于选择日期范围的php sql where选项

用于选择日期范围的php sql where选项,php,mysql,Php,Mysql,在我的php页面中,我创建了一个下拉列表来选择all,或者选择一个大于X天前的所有数据,比如10。我在寻找一种简化的方式来运行我的查询,而不是我所做的 我所做的是,我只是想看看是否有一个选项可以简化这个查询: if($dropDownInput == 'All'){ $db_query = mysqli_query("SELECT Name, MAX(Date), SUM(Iteratitions) FROM my_table

在我的php页面中,我创建了一个下拉列表来选择
all
,或者选择一个大于X天前的所有数据,比如
10
。我在寻找一种简化的方式来运行我的查询,而不是我所做的

我所做的是,我只是想看看是否有一个选项可以简化这个查询:

if($dropDownInput == 'All'){
   $db_query = mysqli_query("SELECT Name, MAX(Date), SUM(Iteratitions)
                             FROM my_table
                             GROUP BY Name, Date")
} else{
   $db_query = mysqli_query("SELECT Name, MAX(Date), SUM(Iteratitions)
                             FROM my_table
                             WHERE Date >= (CURDATE() - INTERVAL $range day)
                             GROUP BY Name, Date")
}

大致如下:

$sql = SELECT Name, MAX(Date), SUM(Iteratitions)
                         FROM my_table
if($dropDownInput != 'ALL'){
    $sql.= " WHERE WHERE Date >= (CURDATE() - INTERVAL $dropDownInput day)
}
$sql.="GROUP BY Name, Date"

$db_query = mysqli_query($sql)

您的查询看起来很好,但是如果您已经将其包括在group by中,则使用
max(date)
是多余的。它可以是select name、date等。如果需要,我会尝试提取公共SQL并添加到条件中。与相同代码的两个副本相比,维护公共SQL更容易。如果仍要简化此提取公共SQL“从my_表中选择名称、最大值(日期)、总和(迭代)”,则您的查询看起来很好并将其分配给一个变量,该变量可以与WHERE子句连接:当使用
mysqli
时,您应该使用并将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是php4时代引入
mysqli
API时的产物,不应在新代码中使用。