質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1762閲覧

phpでmysqlに保存した画像を出力したい

daiki_anisan

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/10/11 09:04

編集2017/10/11 09:45

phpでmysqlに保存した画像を取り出して表示するプログラムを作っています。
ですが、実行しても”~~~の画像は壊れています”と出て出力することができません
ご指摘いただければと思います。

###発生している問題・エラーメッセージ

画像ファイル~~~~は壊れているため表示できませんでした ###該当のソースコード <?php /////////////////////////////////////////////////////////////////////// $user = ''; $pass = ''; $pdo = new PDO('mysql:', $user, $pass); /////////////////////////////////////////////////////////////////////// $date = $_REQUEST["date"];//送られてきた変数(どこの投稿の画像か判別) $sql = "SELECT * FROM KEIJIBAN"; $pdh = $pdo->query($sql); foreach($pdh as $keiji) { if($_REQUEST == $keiji['date']) { $img = $keiji['imag_file']; } } header("Content-Type: image/png"); echo $img; ?> 追記: /////変数の設定 $name = $wow[2]; $comment = $_POST['comment']; $date = date("Y/m/d H:i:s", time()); $img = file_get_contents($_['imag_file']);//別フォームから送られてきたファイルが入っています $img = mysql_real_escape_string($img); /////INSERT部分 $sql = "INSERT INTO KEIJIBAN2(name,comment,date,imag_file,video_file)VALUES(:name,:comment,:date,:imag_file,:video_file)"; $stmt = $pdo->prepare($sql); $params = array(':name' => "$name",':comment' => "$comment",':date' => "$date",':imag_file' => "$imag",':video_file' => "$video_file"); $stmt -> execute($params); ###試したこと ネットにあった記述をいろいろ 別のサンプル画像を入れてみる header関数を消してみる→ちゃんと画像ファイルとして入っている? DBを作りなおしてみる dateはちゃんと表示されます ###補足情報(言語/FW/ツール等のバージョンなど) 取り出し先のDB構成です (name VARCHAR(32), comment VARCHAR(100), date CHAR(32), imag_file BINARY(255), video_file BINARY(255))'; 格納している画像は、208バイトのpngファイルです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya_ohashi

2017/10/11 09:31

画像を保存するのはどうやっていますか?MySQLに直接流し込んでいますか?PDOで保存していますか?
guest

回答3

0

mysql_real_escape_string

これはPDOでは利用しません、該当する記述を削除して下さい

投稿2017/10/11 09:43

yambejp

総合スコア114742

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

0

テーブルのimag_fileはBLOB型にしましょう。BINARY型はデータを入れたときに末尾にパディングとして0x00という値で埋め尽くされます。なので、あなたの画像データは208byte以降47byte分余分な0x00がくっついています。BLOB型であればそういったパディングは起きません。

#追記
アップロードされたファイルを取得する処理が大きく間違っているように見えます。PDOでのアップロードファイルの保存の実装の参考記事を貼っておきます。
https://qiita.com/ShibuyaKosuke/items/dbe45cbf43bd819bf6cc

投稿2017/10/11 09:16

編集2017/10/11 09:55
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daiki_anisan

2017/10/11 09:29

テーブルをBLOB型で作りなおしました (name VARCHAR(32), comment VARCHAR(100), date CHAR(32), imag_file BLOB, video_file BLOB)'; 同じ結果になりました・・・
masaya_ohashi

2017/10/11 09:30

データは入れ直しましたか?
guest

0

自己解決

自己解決しました。
INSERTのところでfileの処理を怠っていました

投稿2017/10/16 01:41

daiki_anisan

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問