LoginSignup
3
3

More than 5 years have passed since last update.

【PHP】データベースに入れた画像をランダムで表示する方法

Last updated at Posted at 2015-09-11

お目汚しすいません。ど素人の勉強ノートです。
今日は、データベースに入れた画像をランダムで表示する方法を勉強しました。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年)
全体的にコチラの本を読みながら勉強しています。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3