MYSQLでPHPから画像を表示する方法

このQ&Aのポイント
  • PHPとMYSQLを使用して画像を表示する方法について説明します。
  • header関数を使用してContent-typeを指定し、mysql_query関数を使用してデータベースから画像を取得します。
  • テーブルタグやwhile文を使用する場合は、適切にHTMLタグを組み合わせる必要があります。
回答を見る
  • ベストアンサー

MYSQLでPHPから画像表示したい

以下でPHPとMYSQLにて画像jpgを表示できたのですが、 header("Content-type: image/jpeg"); $result = mysql_query("SELECT * FROM test"); $row = mysql_fetch_assoc($result); print ($row['image']);これだけなら表示OK。 しかし、 テーブルタグの中にprint ($row['image']);をいれたり while文で囲んだりすると、文字の羅列になってしまいます。好きな場所にprint ($row['image']);で表示するには どうしたらいいのでしょうか?

  • devid
  • お礼率34% (166/478)
  • PHP
  • 回答数4
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.2です。 >文字の羅列になります。 文字列がブラウザに出力(表示)されているということでしょうか。 であれば、どこかコーディングに問題があるのでしょう。 例示された部分は問題ないようですが、前後が分からないのでなんとも言えません。 >呼び出す方法に切り替えたほうが無難でしょうか? それで問題が解決するなら「無難」ということでしょう。 方法論としてどちらが良いかは私は分かりかねます。すいません。

devid
質問者

補足

"<img src=\"data:image/jpeg;base64," . base64_encode($row['image']) ."\">"; の使い方はIE8からサポートとwebでみかけましたが、 どうなんでしょうか?

その他の回答 (3)

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.3

header("Content-type: image/jpeg"); $result = mysql_query("SELECT * FROM test"); $row = mysql_fetch_assoc($result); print ($row['image']); これだけでなら一応動きますけど、 これ以外の情報は1ビットでも送ってしまったら表示出来なくて当然です。 "Content-type: image/jpeg" という設定がありますが、 これは、送信するデータはjpeg画像形式のファイルだという意味です。 そもそも、HTMLページにテーブルや画像が表示されているという状況は、 html形式のファイルと画像形式のファイルという複数のデータファイルをブラウザが受信しているからこそ出来ているのですよ。 というか、 画像をブラウザに表示させる為には、 画像ファイルのみをブラウザが受信するか imgタグで画像のアドレスを設定する以外の手段くらいしかありませんよ。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

画像を出力するだけのphpファイルを用意して(既に用意されているかと思います)、それをimgタグで呼び出す方法もあると思います。 ところで、ANo.1の方の回答に対し「できません」だけでは何がいけないのかわかりません。できないならできなかったなりに何をどうしたのか、現状どうなっているか、など詳しく書くようにした方がよいですよ。 質問、回答が冗長するだけです。

devid
質問者

補足

呼び出す方法に切り替えたほうが無難でしょうか? echo "<img src=\"data:image/jpeg;base64,". base64_encode($row['image'])."\">";ですが、文字の羅列になります。MYSQLにもbase64_encodeで入力してみましたが同じでした。

  • umota
  • ベストアンサー率46% (150/324)
回答No.1

ヒント 例えば echo "<img src=\"data:image/jpeg;base64," . base64_encode($row['image']) ."\">"; とかを HTML文 に埋め込むのはどうでしょうか。

devid
質問者

補足

うーまだ表示できません。。

関連するQ&A

  • MYSQLから画像を取り出したい

    PHPとMYSQLにて画像を表示したいのですが、 PHPmyadminにてBLOB型にJPG画像を手動で 入れて有ります、そこで下記のように取り出そうとしたのですが、文字の羅列が長く表示され、画像はでません。 $result = mysql_query("SELECT * FROM test"); $row = mysql_fetch_assoc($result); print ($row['image']); 文字の羅列が出るので、データははいっているとおもうのですが、取り出し方が悪いのでしょうか?

    • ベストアンサー
    • PHP
  • PHP+MYSQLにおける、画像の表示について。

    いつも参考にさせていただいております。 ありがとうございます。 さて、表題の件ですが、現在、画像掲示板を作成中です。 テーブルの作成が終わり、アップロードするPHPまでは完了。 画像がバイナリで保存されるところまでは作成が完了しました。 次に、呼び出しのPHPを作成しようと現在作成中ですが、ここで躓づきました。 テーブル Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | commentid | int(3) | YES | | NULL | | | comment | mediumtext | YES | | NULL | | | picture1 | mediumblob | YES | | NULL | | このテーブルの中に、レコードが5つあり、それぞれカラムpicture1に画像データを持たせてあります。 このテーブルに対して、 <?PHP $s=mysql_connect("localhost","root","password") or die("登録フォーム接続に失敗しました。"); mysql_select_db("smartphone"); $result = mysql_query("SELECT * FROM commentmaster"); while($row = mysql_fetch_array($result)){ header("Content-type: image/jpeg"); print($row[3]); } exit(); ?> <html> <head> <title>コメント一覧</title> </head> </html> 以上のPHPファイルで画像の呼び出しをしようとしたのですが、 1枚目の画像は表示されるものの、2枚目以降の画像が表示されません。 ちなみに、 header("Content-type: image/jpeg"); print($row[3]); の部分を、 #header("Content-type: image/jpeg");←コメントアウトした。 print($row[0]);←picture1ではなく、IDを取得に変更 このように変更すると、カラム0のIDが5つ表示されます。 過去のコメントを拝見したのですが、機能的に無理なものなのか、書き方が悪いだけなのか。 また、別の方法があるのかの判断が付きませんでしたので、質問をさせていただきました。 お手数をおかけしますが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでMySQLへの接続

    お世話になります。 phpを用いてMySQLへ接続したのですが、データが空で戻ってきました。lowは件数表示されましたし、行数もその分返ってきています。何か原因は考えられるでしょうか? <html> <head> <title>PHP TEST</title> </head> <body> <?php $link = mysql_connect('localhost', 'XXXX', 'XXXX'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('<p>接続に成功しました。</p>'); $db_selected = mysql_select_db('XXXX', $link); if (!$db_selected){ die('データベース選択失敗です。'.mysql_error()); } print('<p>uriageデータベースを選択しました。</p>'); //mysql_set_charset('utf-8'); $result = mysql_query('SELECT * FROM sample'); if (!$result) { die('クエリーが失敗しました。'.mysql_error()); } while ($row = mysql_fetch_assoc($result)) { print('<p>'); print('id='.$row['str']); print(',name='.$row['etc']); print('</p>'); } $close_flag = mysql_close($link); if ($close_flag){ print('<p>切断に成功しました。</p>'); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • mySQLで結果が無いときの処理

    $sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

    • ベストアンサー
    • PHP
  • PHP MySQLでエラーがでてしまいます。

    PHP MySQLからデータを取得したいのですが、以下のエラーが出てしまい原因が分かりません。 詳しい方お願い致します。 <b>Warning</b>: json_encode() expects exactly 1 parameter, 2 given in <b>/home/users/2/***.**-********/web/****************/php/seupPharmacyData.php</b> on line <b>21</b><br /> エラーが出るコードは以下になります。 <?php include "db.php"; $sql = "SELECT * FROM user_data"; $query = mysql_query($sql, $db) or die("クエリの送信に失敗しました。<br />SQL:".$sql); $result= array(); while ($row = mysql_fetch_object($query)) { $result[] = array( 'name1' => $row->name1, 'name2' => $row->name2, 'name3' => $row->name3, 'id' => $row->id, ); } //jsonとして出力 header('Content-type:application/json; charset=UTF-8'); echo json_encode($result,JSON_UNESCAPED_UNICODE); ?>

    • ベストアンサー
    • PHP
  • smartyでMySQLから連想配列取り出しと表示

    フォーム(POST)を使ってMySQLにデータを挿入し、 mysql_fetch_assocにて連想配列で取り出して、 whileで表示する場合、 ======================================== $sql = "SELECT * hogehoge"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["name"]; echo $row["sex"]; } ======================================== とすれば、MySQLから値を取りだして表示できます。 ただ、それをsmartyに置き換えて以下のようにすると、 ======================================== {foreach from=$row item=hoge} <tr> <td>{$row.userid}</td> <td>{$row.name}</td> <td>{$row.sex}</td> </tr> {/foreach} ======================================== 同じ値が$rowの値の数だけ返されてしまいます。 例だと、 1 太郎 男 2 花子 女 3 一郎 男 4 陽子 女 5 良子 女 と表示したいものが、 1 太郎 男 1 太郎 男 1 太郎 男 となってしまいます。 これを解決するには、どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • phpでSQLSV2005の画像を表示する方法

    いつもお世話になっております。 php5.1でSQL Server 2005のIMAGE型内の画像を表示するにはどうすればよいでしょうか。 以下のソースでデータを読み込んで出力しようとしていますが、 ブラウザには × が表示されてしまいます。 **** phpここから ************************************************************* header("Content-Type: image/jpeg"); header("Content-Disposition: inline;"); header("Content-Transfer-Encoding: binary"); $con = mssql_connect("xxDBサーバxx", "xxIDxx", "xxパスワードxx"); if (!$con) { print("データベースへの接続に失敗しました"); exit; } if (!mssql_select_db("xxDB名xx")) { print("データベースへの接続に失敗しました"); exit; } $sql = "select img_data from foo "; //img_data は IMAGE型 $result = mssql_query($sql); if (!$result) { print("SQLの実行に失敗しました<BR>"); exit; } $row = mssql_fetch_row($result); echo $row[0]; **** ここまで ******************************************************************** DBのフィールド img_data には数百KBの画像データが入っているはずなのですが、 試しに strlen($row[0])の値を見てみると、4096でした。 4KBしかデータを得れていない様に見えます。 もしかすると、特殊な変換をしないとデータを得ることができないかとも思ったのですが、 同じテーブルを使用するVB6.0のプログラムでは以下の様な問合せで表示できている様子です。 SQL: SELECT img_data FROM foo もしかすると、PHPは特殊な処理をしないとデータを得ることができないのでしょうか・・・? お詳しい方がいらっしゃいましたら、何卒ご教授をお願い申し上げます。 何卒よろしくお願い致します。

    • 締切済み
    • PHP
  • php,mysqlにて画像パス保存/表示につい

    mysqlに画像パスを格納しておき、phpでブラウザに表示するという部分について質問があります。 以前画像を扱った際は、DBにそのまま画像データを格納していたのですが、一般的ではないということで画像パス使う方針にしました。 画像パスはthumbnailというカラムにvarcharで画像パスを格納しました。 今回ご相談させていただいた件では、主に画像の表示の部分にアドバイスをいただければと考えています。 以前画像をそのまま保存し表示するときは、get_image.phpのようなファイルを噛ませ、それをブラウザに読み込ませることで表示していたのですが、画像パスでも同じようなやり方でいいのでしょうか? ネットで調べてみたのですが、何となくしっくりこないというか、私の誤解もあるかもしれないのですがすっきりせず迷走中です。 どうか、アドバイスをご教示いただけないでしょうか。 ※以下は、試しにget_image.php噛ませてみた際のコードです。 <?php $id = $_GET['id']; //DB接続 ~省略~ $sql = "SELECT image FROM テーブル名 WHERE id='$id'"; $result = mysql_query($sql); if (!$result) { echo ("SQLの実行に失敗しました<BR>"); echo(mysql_errno().": ".mysql_error()); exit; } $row = mysql_fetch_array($result); mysql_close($con); $img_path = '$row['image']' $img = file_get_contents($img_path); header('Content-type: image/jpg'); echo $img; ?>

    • ベストアンサー
    • PHP
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP
  • PHPでMySQLのデータを2次元配列に格納する

    PHPの本に $r = mysql_query("SELECT * FROM tb;"); while ($row = mysql_fetch_array($r)){ print "{$row['id']}{$row['title']}<BR>"; } とあったのですが1行ずつしか保存できないので 2次元配列row[][]で while ($row[] = mysql_fetch_array($r)){ } foreach($row as $v){ print "{$v['id']}{$v['title']}<BR>"; } このようにコーディングしたところ 一応うまく表示されたのですが、問題はないですか? もし普通はこういう風にするみたいなやり方があれば 教えて欲しいです。

    • ベストアンサー
    • PHP

専門家に質問してみよう