【 PHP 】PHP8に入門してみた 195日目 PHPの基本 ( データベース 画像をデータベースに保存 )

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

データベース

bindValueを応用して画像をデータベースに保存

bindValueメソッドを用いて画像(バイナリデータ)をデータベースに保存出ます。

具体的にはデータベースのLOB型に変換して保存するわけです。

bindValue_from.php

<!DOCTYPE html>

<html>

<head>
    <meta charset="UTF-8" />
    <title>画像のアップロード</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <form method="POST" enctype="multipart/form-data" action="bindValue_process.php">
        <input id="photo" type="file" name="photo" size="50" />
        <input type="submit" value="アップロード" />
    </form>
</body>

</html>

bindValue_process.php

<?php
require_once './DbManager.php';

try {
    // データベース接続
    $db = getDb();
    // INSRT
    $stt = $db->prepare('INSERT INTO photo(type, data) VALUES(:type, :data)');

    // プレースホルダーに情報セット
    $file = fopen($_FILES['photo']['tmp_name'], 'rb ');
    $stt->bindValue(':type', $_FILES['photo']['type'], PDO::PARAM_STR);
    $stt->bindValue(':data', $file, PDO::PARAM_LOB);

    // INSERT実行
    $stt->execute();
} catch (PDOException $e) {
    die("エラーメッセージ:{$e->getMessage()}");
}

 

 

#LOBを出力してもバイナリコードなので意味が分からないので割愛です。
MariaDB [selfphp]> select type from photo;
+-----------+
| type      |
+-----------+
| image/png |
+-----------+
1 row in set (0.000 sec)

 

 

メモ

画像の確認したかったのですがその部分の学習をスキップしているので確認できず!

PHPPHP

Posted by raika@blog