0

PHPとmySQLを使用して「今日の歴史」タイプのページを作成しようとしています。mySQLデータベースには、エントリごとにid、date、topic、eventの列があります。日付列は、YYYY-MM-DDであるmySQL日付型を使用します。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'];
}

印刷されるのは「現在の日付で、次のイベントが発生した」だけです。また、それは最も重要ではありませんが、私の現在の日付は将来の1日で印刷されます。

助けてくれてありがとう。

4

2 に答える 2

1

月、日などを抽出するためにmysql関数を使用したいと思います。

クエリ:

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

mysql のタイム ゾーン設定と php ゾーンの設定をチェックして、時間が 1 時間進んでいる理由を突き止めてください。

于 2013-01-15T04:31:56.220 に答える
0

おっしゃる通り、同じ日と月に異なる年に発生したすべてのイベントを選択する必要があります。その場合、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)
于 2013-01-15T04:43:15.050 に答える