2015-12-31 52 views
0

我是新手。我想生成一個報告來計算時間戳在兩個日期之間的MySQLi記錄。每條記錄都有一個timestamp字段,該字段在MySQLi創建時自動生成。當我在phpMyAdmin中查看時間戳時,它們顯示爲以下格式2015-12-31 19:25:51比較MySQLi中的日期WHERE子條款

我有一個PHP頁面,使用單選按鈕選擇「Last 7 days」,「Last 30 days」,「自開始記錄」等HTML表單輸入。基於這個選擇,我有一個Javascript創建startdate和enddate變量作爲DATE對象,我使用JQuery $ .post將這些變量發送到另一個PHP頁面來執行查詢。

我開始寫SQL查詢。我想是這樣

$startdate = $_POST["startdate"]; 
$enddate = $_POST["enddate"]; 
$con = mysqli_connect("localhost","username","password","db"); 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$sql="SELECT * FROM dbtable WHERE timestamp BETWEEN $startdate AND $enddate"; 
if ($result = mysqli_query($con,$sql)) { 
    $count = mysqli_num_rows($result); 
} 

的代碼工作正常,如果我沒有一個WHERE款(當然只計算所有記錄這是不是我要找的)。所以我知道問題在於WHERE子句中。我懷疑問題是MySQLi時間戳格式與我發佈的變量的JS DATE對象格式不同。如果我可以將時間戳和JS變量轉換爲整數(可能表示1970年1月1日以後的毫秒或類似),那麼比較就可以工作。

+0

你已經用單引號或'#'符號完成了'$ startdate'和'$ enddate'嗎? – Cyval

回答

0

你需要這個(更改日期格式),以取代這兩個日期變量:

$startdate = date('Y-m-d h:i:s',strtotime($_POST["startdate"])); 
$enddate = date('Y-m-d h:i:s',strtotime($_POST["enddate"])); 

和您的查詢應該是這樣的(加單引號):

$sql="SELECT * FROM dbtable WHERE timestamp BETWEEN '$startdate' AND '$enddate'"; 
+0

太棒了 - 這似乎工作。不過,我想比較一下時間和日期。我應該做一些像'$ startdate = date('Y-m-d-h-m',strtotime($ _ POST [「startdate」])); $ enddate = date('Y-m-d-h -m',strtotime($ _ POST [「enddate」]));'爲了達到這個目的? – JulesGru

+0

@JulesGru:好的,回答已經更新了時間 – devpro

+0

在mysql datetime格式中是這樣的:Y-m-d h:i:s – devpro

0

嘗試這種方式

$sql="SELECT * FROM dbtable WHERE timestamp BETWEEN '" . $startdate . "' AND '" . $enddate . "'"; 
0

您應該括單引號日期變量。

$startdate = $_POST["startdate"]; 
$enddate = $_POST["enddate"]; 
$con = mysqli_connect("localhost","username","password","db"); 

if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$sql="SELECT * FROM dbtable WHERE timestamp BETWEEN '$startdate' AND '$enddate'"; 

if ($result = mysqli_query($con,$sql)) { 
    $count = mysqli_num_rows($result); 
}