我正在尝试使用PHP和mySQL创建一个"历史上的这一天"类型的页面。在mySQL数据库中,我为每个条目设置了以下列:id、日期、主题、事件。日期列使用mySQL的日期类型YYYY-MM-DD。我试图在PHP中使用日期函数以相同的日期调用相应的mySQL条目,但我不知道如何连接它们。
第一部分成功返回了数据库中的所有内容。
<?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'];
}
它打印出的唯一内容是"在当前日期,发生了以下事件:"此外,虽然这不是最重要的,但我当前的日期正在打印出未来的一天。
谢谢你的帮助
我更喜欢使用mysql函数来提取月份,日期等
查询:
SELECT * FROM events WHERE EXTRACT(MONTH FROM date) = MONTH(NOW())
AND EXTRACT(DAY FROM date) = DAY(NOW())
试着检查mysql的时区设置和php的时区设置,找出为什么时间提前一小时
如果我理解正确的话,您需要选择在同一天和月份但在不同年份发生的所有事件。如果是这样,您的select语句应该如下所示
SELECT *
FROM events
WHERE MONTH(events.date) = 2 AND DAY(events.date) = 2
将选择2月2日发生的所有事件
现在,如果你只需要获取当天和月份发生的事件,那么你根本不需要传递任何参数,完全可以在SQL中这样做:
SELECT *
FROM events
WHERE MONTH(events.date) = MONTH(CURRENT_DATE) AND
DAY(events.date) = DAY(CURRENT_DATE)