【问题标题】:How to specify PHP MYSQL dates without time如何指定没有时间的 PHP MYSQL 日期
【发布时间】:2016-07-08 02:28:08
【问题描述】:

这很好用:

SELECT DISTINCT customers 
FROM customertable 
WHERE time_paid BETWEEN '2016-06-28 10:27:55' AND '2016-07-05 14:07:51';

但是,由于我使用 javascript datepicker 让用户选择日期期间并且只有日期但没有时间,这显然不起作用:

SELECT DISTINCT customers 
FROM customertable 
WHERE time_paid BETWEEN '2016-06-28' AND '2016-07-05';

我的选择语句是这样的:$t1 是小日期,而 $t2 是大日期。

$sql = "SELECT DISTINCT customertable FROM customer WHERE time_paid BETWEEN '$t1' AND '$t2'";

$result = mysqli_query($conn, $sql);
$rowcount = mysqli_num_rows($result);

有没有一种方法可以在我的 select 语句中插入一个连接的日期,比如 '$t1'.12.00.00,以便在选择时处理我的数据库中的完整 DATETIME 条目?

【问题讨论】:

  • (1) 怎么不行?日期格式很好。 (2) 为什么不使用参数化查询?您不应该在查询字符串中嵌入参数值。
  • 用户应该使用javascript日期选择器日历来选择日期间隔。但是,日期选择器只有月份的日期,没有时间。适用于日期和时间,但不适用于仅日期
  • 您确定日期选择器以YYYY-MM-DD 格式返回日期吗?
  • 只要确保 $t1$t2 从 JS 端提供正确的格式,正如 Gordon 所说,您应该使用准备好的语句来代替
  • WHERE time_paid BETWEEN '$t1 00:00:00' AND '$t2 00:00:00' 应该可以正常工作。你试过了吗?

标签: php mysql mysqli


【解决方案1】:
  1. 永远不要在 SQL 语句中使用字符串插值。这就是 SQL 注入攻击的发生方式。请改用占位符。

  2. 修改 javascript 日期选择器生成的格式以包含时间。

和/或

  1. 如果日期字符串中没有时间组件,请添加时间组件。

【讨论】:

    【解决方案2】:

    如果查询中没有时间值的日期。

    您可以将日期时间值除以空格并检查它是否有时间。

    如果它没有时间参数,那么只需添加 00:00:00 和 23:59:59。

    看这个例子:

    function getCustomers($from, $to) {
      $from = explode(' ', $from);
      if(sizeof($from) != 2) {
        $from = $from[0]. ' 00:00:00';
      }
    
      $to = explode(' ', $to);
      if(sizeof($to) != 2) {
        $to = $to[0]. ' 23:59:59';
      }
    
       // re-parsing datetime values to prevent sql injection 
      $from = date('Y-m-d H:i:s', strtotime($from));
      $to = date('Y-m-d H:i:s', strtotime($to));
    
      $q =   
        "SELECT DISTINCT customers 
        FROM customertable 
        WHERE time_paid >= '".$from."' AND time_paid <= '".$to."'";
    
      // and so on...  
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2013-06-16
      • 2020-01-11
      • 2018-04-27
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      相关资源
      最近更新 更多