今回はデータベースから検索したデータを表示する部分です。
さっそく該当部分のソースです。
$body = "";
$sqlStr = "SELECT id,vurl FROM fav_xvideos LIMIT " . $pageIdx . ",10";
$sql = $pdo->prepare($sqlStr);
$sql->execute();
while($row = $sql->fetch()) {
$id = $row['id'];
$vurl = $row['vurl'];
$body .= "<div>";
$body .= " <iframe src='http://flashservice.xvideos.com/embedframe/" . $vurl . "'";
$body .= " frameborder=0 width='400' height='320' scrolling=no></iframe>";
$body .= " <p><a href='db_del.php?id=" . $id . "'>削除</a></p>";
$body .= "</div>";
}
if ($body == "") {
$body = "動画が見つかりませんでした。";
}
$body .= "<hr/>";
if ($page > 0) {
$body .= "<a href='?page=" . ($page - 1) . "'>前へ</a> | ";
}
$body .= "<a href='main.php?page=" . ($page + 1) . "'>次へ</a>";
上から解説していきます。
$sqlStr = "SELECT id,vurl FROM fav_xvideos LIMIT " . $pageIdx . ",10";
というところがSQL文を作っているところです。文字をくっつけているだけですね。SQL文は、簡単に説明すると以下のような命令です。
SELECT 知りたい列 FROM テーブル名 LIMIT 検索結果を何番目から何個表示するか
最後に変数をくっつけているのは、前回やったページングのためのものですね。これは、データベースの中身を全部持ってきちゃうとすごい量になったりして表示にメモリを喰い過ぎ、最悪ブラウザが落ちてしまうのを防ぐためです。
今回executeには引数を渡してません。こういうやり方もある、ということで渡してないです。どちらでも構いません。やりやすい方で。僕は結構ごちゃまぜにします。統一するのは自作関数にまとめて、使う側の意志を入れないようにする時ですね。要は大規模な開発の時です。データベース関連は統一しといたほうがデバッグ(バグを探し、取り除く手順)が楽です。
そして、新しく登場するwhile文です。これもPHPの構文で、
while ( 条件 ) {
繰り返す処理;
}
という形です。条件が一致(true)している間、処理を何度も繰り返す時に使います。前回のif文の条件と同じように、$rowに値がfalseにならない何かしらが入っていればtrueですね。今回は、fetch関数の戻り値です。
fetch関数も新しく登場です。
$row = $sql->fetch()
というように使ってます。prepare関数(SQL文を実行する準備を行ったものを返す関数)の戻り値に、fetch関数が含まれてます。execute関数で実際にSELECTの検索が行われますが、fetch関数は、検索で見つかった行のデータを1つずつ返してくれます。何度も呼べば、順番に次の行、次の行、という感じでデータを返し、データが見つから無くなったらfalseを返します。
そのため、whileループのところに入れると、検索で見つかったデータを1行ずつ処理したい時に便利です。
条件のところで関数の戻り値を入れるのが嫌いな人は次のようになります。
$row = $sql->fetch();
while($row) {
処理
$row = $sql->fetch();
}
同じ文を2回も呼ぶのは嫌だ!となると、while以外の構文を使うことで実現できますが、それはまた機会があれば説明します。
そして$rowに入る値ですが、今回は連想配列になります。
SELECT aaa,bbb FROM 〜〜
として列が見つかれば、$row["aaa"]、$row[”bbb”]にそれぞれデータが入ってきます。fetchの返す値は、どんなSQL文を実行していたかで変わってきます。
そして、そのデータをHTML文に入れています。これで、お気に入りの一覧が表示されるわけです。HTMLが何も作れなかったときは、if ($body=="")が成立するので、「動画が見つかりませんでした。」と表示しています。ここは別に無くても問題ありませんが、一応入れてみました。
最後に、「前へ」「次へ」を$bodyに入れてます。aタグのリンクでpageの指定をしているだけですが、括弧内でプラスしたりマイナスしているのは意味があります。括弧を付けないと、左から順番に文字連結の「.」が先に実行されてしまうので、おかしくなるのです。
プログラムでよく括弧「(」「)」が出てきますが、これは数学の括弧と同じように、括弧の中が先に処理されます。PHPに限らず、そういった仕様の言語が多いです。この仕様はよく使うので、覚えとくと便利ですが、プログラムが複雑になりやすい要員の一つでもあります。趣味のプログラムでは、自分が分かれば良いので、複雑になっても誰も怒ったりしませんので自由に作って行きましょう。
次回は、今回つけるだけ付けた「削除」リンクの機能を実装しましょう。
- 関連記事
-