2016-07-08 48 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日期選擇器生成的格式以包含時間。

和/或

  • 添加的時間成分的日期字符串如果他們在不之一。