0

我正在尝试使用 PHP 和 mySQL 制作“历史上的这一天”类型的页面。在 mySQL 数据库中,每个条目都有以下列:id、日期、主题、事件。日期列使用 mySQL 日期类型,即 YYYY-MM-DD。我正在尝试使用 PHP 中的 date 函数来调用具有相同日期的相应 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'];
}

它打印出来的唯一内容是“在当前日期,发生了以下事件:”此外,虽然这不是最重要的,但我当前的日期将在未来的某一天打印出来。

谢谢你的帮助。

4

2 回答 2

1

我更喜欢使用 mysql 函数来提取月份、日期等。

询问:

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

尝试检查 mysql 时区设置和 php 时区设置,以找出提前一小时的原因。

于 2013-01-15T04:31:56.220 回答
0

如果我理解正确,您需要选择在同一天和同一月但在不同年份发生的所有事件。如果是这样,您的选择语句应如下所示

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)
于 2013-01-15T04:43:15.050 回答