LoginSignup
0
5

More than 3 years have passed since last update.

【PHP+MySQL】データベースに格納した画像データを表示する方法(base64エンコード)

Posted at

1.DBに格納した画像を表示したい。

特定のフォルダに入っている画像の表示ではなく、DBに格納した画像(バイナリデータ)
を表示する方法を知りたい。
そんな場合に使える方法を調べてみた。

一般的にある下記方法を実行すると、真っ黒い画面しか出てこない。

<?php
$img = file_get_contents("test.jpg");
//ここでdbに$imgを格納
//格納した$imgをselectして取り出し
header('Content-type: image/jpeg');
echo $img;
?>

解決方法は4へ。

2.恐竜の画像を格納するテーブルの作成

画像はmediumblob型として保存

create table tbl_dinoimg (
 id integer,
 img mediumblob,
 ext varchar(10),
 primary key(id)
);

3.実際のデータが格納されているテーブル

dino_image1_pre.jpg

4.DBに格納した画像バイナリデータをbase64に変換後、htmlに出力するソース

dino_display_image2.php
<?php 
    $dbname='db_dino';
    $dsn = 'mysql:dbname='.$dbname.';host=localhost:3308;charset=utf8mb4';
    $user = 'root';
    $password = 'root123';
    $dbh = new PDO($dsn, $user, $password);

    $sql_select = "SELECT ext,img FROM tbl_dinoimg WHERE id = ?";
    $result1=$dbh->prepare($sql_select);
    //パラメータをセット
    $id=1;
    $result1->bindparam(1,$id,PDO::PARAM_INT);
    $result1->execute();
    $row = $result1 -> fetch(PDO::FETCH_ASSOC);
    //取得した画像バイナリデータをbase64で変換。
    $img = base64_encode($row['img']);
 ?>
    <!-- エンコードした情報をimgタグに表示 -->
    <img src="data:<?php echo $row['ext'] ?>;base64,<?php echo $img; ?>"><br>

5.画像表示に成功

dino_image0_pre.jpg

0
5
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
0
5