2016-01-21 46 views
2

我的問題與[this] [1]類似,但提供的解決方案對我無效。 我有一個數據庫,我有一列名爲birth,其中包含格式爲year-day-month 00:00:00的日期。現在我想從DB中提取出現在兩個日期之間的所有記錄。 的birth值已被插入DB與此代碼mysqli準備好的語句與條款之間

$date = $day . "-" . $month. "-" . $year; 
$a = strptime($date, '%d-%m-%Y'); 
$DB_date = date('Y-m-d H:i:s',mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)); 

要提取我使用此代碼日期:

$stmt = $conn->prepare('SELECT * FROM database WHERE `birth` BETWEEN ? AND ?'); 
$start_date = '1990-01-01'; 
$stop_date = '1995-01-01'; 
$stmt->bind_param('ss',$start_date,$stop_date); 
$stmt->execute(); 
$result = $stmt->get_result(); 

,但沒有找到任何如此$result->num_rows等於0它不會給出任何錯誤,所以問題必須在日期的比較中。

+1

你可以從你的表中顯示一些示例數據嗎? (順便說一句:爲什麼ydm而不是iso標準的ymd,它具有可排序的優點,而不會讓人困惑? –

+0

是DATETIME類型的列出生a,或者它只是一個VARCHAR列,您可以在其中存儲那種格式的日期? –

+0

@GeraldSchneider'birth'的類型是'date' –

回答

0

出生欄格式是y-d-m小時分鐘秒。但是在你的where子句中,你忽略了小時分鐘的第二個因子。

替換:

$start_date = '1990-01-01'; 
$stop_date = '1995-01-01'; 

有了這個:

$start_date = '1990-01-01 00:00:00'; 
$stop_date = '1995-01-01 00:00:00'; 

請嘗試,讓我知道,如果它的工作原理

+0

這與DATETIME列無關。 –

+0

如果字段類型是日期時間,那麼您必須在DATETIME值之間進行比較,而不僅僅是DATES。 – nimTas

+0

'birth'的數據類型是'date'。把時間放在日期上並沒有什麼區別,行爲和以前一樣... –

0

我找到了解決辦法

的代碼在我的問題如果數據庫中列的數據類型爲datetime,並且還需要確保那$start_date$stop_date舊。我仍然想知道爲什麼它不適用於date數據類型。