お目汚しすいません。ど素人の勉強ノートです。
今日は、データベースに入れた画像をランダムで表示する方法を勉強しました。PDOで呼び出してます。(データベースには、画像データと、画像typeが格納されています。)
細心の注意を払ってはおりますが、問題……あるかもしれません。
もし、ご指摘いただけるととても嬉しいです。よろしくお願いします。
データベースに入れた画像をランダムで表示する
データベース設定
dbmanager.php
<?php
function getDb(){
$dsn = 'mysql:dbname=***; host=localhost; charset=utf8';
$usr = '****';
$psw = '****';
try {
$db = new PDO($dsn, $usr, $psw);
} catch (PDOException $e) {
exit('データベース接続失敗。'.$e->getMessage());
}
return $db;
}
サンプルコード
sample.php
<?php
session_start();
require_once 'dbmanager.php';
try{
$pdo = getDb();
$stmt = $pdo->prepare("SELECT * FROM tables where image != '' and type != '' ORDER BY RAND() limit 1");
$stmt->execute();
} catch (PDOException $e) {
echo $e->getMessage();
}
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$_SESSION['image'] = $row['image'];
$_SESSION['type'] = $row['type'];
?>
<img src="UseImg.php">
(「!=''」は、空文字とnull値をはじく。)
呼び出す画像ファイル
UseImg.php
session_start();
if (!isset($_SESSION['image'])) { die('abort'); }
$type = $_SESSION['type'];
header('content-type: $type');
echo $_SESSION['image'];
課題
自分の理解したことによると、sqlを外部から書き換えられる(フォームの値によって出力されるデータが変わるような)可能性がある場合、PDOの書き方は特に気をつけなきゃならない、と思っているので、今回のような場合は問題はなさそうなのですが……全然まだまだPDOを理解しきっていないので毎回、不安です。
sql文に「!=''」を入れても大丈夫なんだろうか、とか無意味に心配してしまう。
参考
・PHP+MySQLで簡易画像アップローダ
画像保存に関して参考にさせていただきました。
・山田祥寛『独習PHP 第2版』(翔泳社, 2010年)
全体的にコチラの本を読みながら勉強しています。