「PHPとMySQLでデータの取得」の編集履歴(バックアップ)一覧はこちら
「PHPとMySQLでデータの取得」(2015/08/18 (火) 23:05:01) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
前回記事[[phpでMySQLへフォームを使って挿入]]で挿入したものを呼び出します。6月3日記事
~
目次
#contents
~
~
----
~
*クエリの条件
公開日が現在の日付以下で、かつステータスが公開中(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を使い、ユーザによって入力されたものが適切な値かどうかチェックしていく機能があります。
*コード
ファイル名(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メソッドで受け取ったデータを取得&表示]]を書いていきます。
前回記事[[phpでMySQLへフォームを使って挿入]]で挿入したものを呼び出します。6月3日記事
~
目次
#contents
~
~
----
~
*クエリの条件
公開日が現在の日付以下で、かつステータスが公開中(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メソッドで受け取ったデータを取得&表示]]を書いていきます。