アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQLに画像を直接保存することができません

$image_content = $mysqli->file_get_contents($_FILES['image']['tmp_name']);
↑↑↑
ここが間違っていると思いますが、解決できません
よろしくお願い致します
テーブルのデータ型は、image_content mediumblob
$image_name $image_type $image_size は登録できました


<!DOCTYPE html>
<html lang="ja">
<body>
<?php

if(isset($_POST['signup'])) { // 新規登録ボタンが押下されたときに実行

$username = $mysqli->real_escape_string($_POST['username']);
// 写真
$image_name = $mysqli->real_escape_string($_FILES['image']['name']);
$image_type = $mysqli->real_escape_string($_FILES['image']['type']);
$image_content = $mysqli->file_get_contents($_FILES['image']['tmp_name']);
$image_size = $mysqli->real_escape_string($_FILES['image']['size']);

//SQL命令文を$queryへ代入
$query = "INSERT INTO users(username,image_name,image_type,image_content,image_size) VALUES('$username','$image_name','$image_type','$image_content','$image_size')";

print "<pre>";
var_dump($image_name,$image_type,$image_content,$image_size);
print "</pre>";

}

?>

<form method="post" enctype="multipart/form-data">
<dl>
<dt><label>氏名</label></dt>
<dd><input type="text" name="username" id="q1" size="30" placeholder="○○ ○○" required></dd>
<dt><label>写真</label></dt>
<dd><input type="file" name="image" accept=".png, .jpg, .jpeg"></dd>
</dl>
<button type="submit" name="signup">新規登録</button>
</form>

</body>
</html>

A 回答 (2件)

まあ、うまくプログラミングをすれば、画像や動画などのバイナリーデータを直接にデータベースのテーブルに格納することは可能だと思いますが、Webサイトのシステム構成をしっかりと理解していないと、うまくいかない可能性が高そうです。


一般的には、前の回答にあるように、画像や動画ファイルは別ファイルとして、そのファイルパスをテーブルに格納する方式が多いようです。

ちなみに、私が勉強用でいじっているWebシステムは、SQLServerのデータベースのテーブルに画像情報を格納しています。
ただ、画像データをそのままバイナリで格納するのではなくて、普通のテキストファイルとして扱えるように「base64」で、バイナリーをASCII変換してテーブルに格納しています。
    • good
    • 0
この回答へのお礼

「base64」を調べてみました。今回はファイルパスで作成を進めたいと思います。回答ありがとうございます

お礼日時:2022/06/05 14:02

MySQLに限らず。

。。
普通、データベースのテーブルの項目に画像や動画といったバイナリーデータを保存することはしません。
データベースの容量を圧迫するだけで利点が無いからです。
それらのバイナリーデータを格納するディレクトリ構造を決め、そのファイル名(ディレクトリ構造とテーブルの内容によってはファイル名を含むフルパス)をデーブルの項目に持ちます。

参考まで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ファイルパスを保存するのですね。

お礼日時:2022/06/05 13:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!