2016-07-08 56 views
0

PHP MYSQL日期这完美的作品:如何指定无时间

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

然而,由于我使用javascript日期选择器供用户挑选的日期和时间都只有日期,但没有时间这显然不工作:

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); 

有没有一种方法,我可以插入一个连接的日期,说“$ t1'.12.00.00,在我的SELECT语句中进行选择时要照顾我的数据库的完整DATETIME入境?

+0

(1)它不起作用?日期格式很好。 (2)你为什么不使用参数化查询?您不应该在查询字符串中嵌入参数值。 –

+0

用户应该使用javascript日期选择器日历来选择日期间隔。但是,日期选择器只有几个月没有日期。适用于日期和时间,但不适用于日期 –

+1

您确定日期选择器正在以“YYYY-MM-DD”格式返回日期吗? – Deepak

回答

-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... 
} 
+0

有趣得到downvoted没有解释(: – num8er

1
  1. 永远,永远,永远使用字符串插值到一个SQL语句。这就是SQL注入攻击的发生。改用占位符。

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

和/或

  • 添加的时间成分的日期字符串如果他们在不之一。
  • 相关问题