※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

前回記事phpでMySQLへフォームを使って挿入で挿入したものを呼び出します。6月3日記事
目次





クエリの条件

公開日が現在の日付以下で、かつステータスが公開中(2)のものを最新5件取得するスクリプトを書いていきます。
間違ってはいけないのが、idで大きい順に公開中のものを取得してはいけないということです。 例えば、idで大きい順に公開中のものを5件取得すると

id date status
いままでの日付一覧 2
10 2015-06-30 2
11 2015-06-12 2
12 2015-06-13 2
13 2015-06-14 2
14 2015-06-15 2

だった場合に、6月15日が最初に来ますが、次に6月14日、6月13日、6月12日、6月30日・・・。と6月30日の記事が後ろのほうにきてしまいます。やはり日付が大きい順に取得していく必要があります。

なのでクエリは

mysql> SELECT id,info_date,title FROM information WHERE info_date <= '今日の日付' 
AND status = '2' ORDER BY info_date DESC LIMIT 5;

とする必要があると思います。

  • 意味

SELECT 選ぶ
id,info_date,titleというカラム名を取得
FROM information informationというテーブルから取得
WHERE info_date <= '日付' AND status = '2' 日付が今日以下でかつ、公開中のもの
ORDER BY info_date DESC 日付順序を逆順に(新しいものを前に)
LIMIT 5 5件取得

PDOのqueryメソッドとprepareメソッドの違い

まずは簡単な違いから。queryメソッド=固定化されたquery。ユーザの入力が一切ないようなタイプのクエリはこちらを使います。prepareメソッド=変数を扱ったもの。ユーザの入力の内容をエスケープ処理していくようなものはこちらを使っていきます。こちらはbindParamやbindValueを使い、ユーザによって入力されたものが適切な値かどうかチェックしていく機能があります。

コード

ファイル名(index.php)

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>トップページの更新情報取得作成</title>
</head>

<body>

<a href="register.php">新規投稿</a>

<br>
<?php

$dsn = 'mysql:dbname=データベース名;host=localhost;port=3306';
$user = 'ユーザ名';
$password = 'ユーザパスワード';

echo '<dl>';

try{
	//成功時対応
	$dbh = new PDO($dsn, $user, $password);
    $sql = "SELECT id,info_date,title FROM information WHERE info_date <= '".date('Y-m-d')."
' and status = '2' ORDER BY info_date DESC LIMIT 5";
    $stmt = $dbh->query($sql);

	$ct = 0;
    while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
		
		
        echo '<dt>'.htmlspecialchars($result['info_date']).'</dt>';
		
        echo '<dd><a href="information.php?id='.htmlspecialchars($result['id']).'">'.htmlspecialchars($result['title']).'</a></dd>';
	$ct++;
	}
	if($ct == 0){echo '<dt></dt><dd>更新情報はありません。</dd>';}
	
echo '</dl>';
}catch (PDOException $e){//失敗時対応
print('Connection failed:'.$e->getMessage());
die();
}

$dbh = null;	

?>

</body>
</html>

というように記述すれば、データが取得できます。

次にPHPとMySQLを使いGETメソッドで受け取ったデータを取得&表示を書いていきます。