2013-01-15 84 views
0

我試圖使用PHP和mySQL製作「歷史上的這一天」類型的頁面。在mySQL數據庫中,每個條目都有以下列:id,日期,主題,事件。日期列使用mySQL日期類型,即YYYY-MM-DD。我試圖在PHP中使用日期函數來調用相應日期的mySQL條目,但我無法弄清楚如何連接它們。如何使用循環連接MySQL日期類型和PHP日期類型

第一部分成功返回數據庫中的所有內容。

<?php 

$config ['db'] = array (
'host'  => 'localhost', 
'username' => 'root', 
'password' => 'root', 
'dbname' => 'party' 
); 

$db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['dbname'] , $config['db']['username'] , $config['db']['password']); 

$query = $db->query("SELECT `events`.`date`, `topic`, `event` FROM `events`"); 

$rows = $query->fetchAll(PDO::FETCH_ASSOC); 

echo '<pre>', print_r($rows, true), '</pre>'; 

不過,我不希望顯示的一切,只是包含相同的月份和日期爲當前日期的行。我將如何正確循環並只顯示單行?這是我結束的地方。

//current day and month 
$current_date = date("m d"); 

//select from database of events where matching month and day  
$statement = $db->prepare("SELECT * FROM `events` WHERE `date` = :md "); 

$statement->execute(array(':md' => $current_date)); 

//echo out events that happened throughout history 
echo "On ", date('F jS'), ", the following events took place:"; 

while($rows = $statement->fetch()){ 

    echo $rows['topic']; 
    echo $rows['event']; 
} 

它打印出的唯一的事情是「在當前日期,以下事件發生了:」此外,雖然它不是最上面的重要性,我的當前日期是打印出來的某一天未來。

感謝您的任何幫助。

+2

您是否使用過date('Ymd H:i:s');作爲你的日期:md? – MyStream

+0

檢查你的PHP時區。這可能是未來獲得一天的原因。 – hjpotter92

回答

1

I`d喜歡使用MySQL的函數提取月,日等

查詢:

SELECT * FROM events WHERE EXTRACT(MONTH FROM date) = MONTH(NOW()) 
AND EXTRACT(DAY FROM date) = DAY(NOW()) 

嘗試查看MySQL的時區設置和PHP區設置找出原因時間提前一小時。

+0

謝謝,像魅力一樣工作。即使我現在的日期顯示前一天,它也會顯示正確的行。我假設這意味着我的PHP而不是mySQL的時間已經到了。 – Brian

0

如果我的理解正確,您需要選擇在同一天,同一月份但不同年份發生的所有事件。如果是這樣,你的SELECT語句應該是這樣的

SELECT * 
FROM events 
WHERE MONTH(events.date) = 2 AND DAY(events.date) = 2 

這將選擇所有事件,2月2日

發生現在,如果你需要得到的只是發生在今天的日和月,然後你不」事件t需要傳遞任何參數,並且可以用SQL這種方式完成:

SELECT * 
FROM events 
WHERE MONTH(events.date) = MONTH(CURRENT_DATE) AND 
    DAY(events.date) = DAY(CURRENT_DATE) 
相關問題