• ベストアンサー

MYSQLで、ファイルを格納する方法を教えてください。

動画ファイルの中身のバイナリデータをまるごとMYSQLのフィールドに格納したいのですが、方法が分かりません。 現在分かっていることは、データ形式をBLOB型として格納することくらいです。 SQL文から、またはC APIを使って実現する方法を教えてください。よろしくお願い致します。

  • MySQL
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
回答No.1

BLOB型でOKですね。 普通にファイルをバイナリで読込んでSQLを発行すれば良いだけだと思いますが。 INSERT INTO hoge VALUES ('バイナリデータ')

fuu-sh
質問者

補足

早速のご回答ありがとうございます。 INSERT INTO hoge VALUES ('バイナリデータ') この場合、バイナリデータを指定するためには (1)バイナリデータを直接書き込むか、 INSERT INTO hoge VALUES ('m.s/zpeor');        //バイナリデータを直接記述 (2)Cプログラム上であれば、配列にコピーして、配列を指定する char buf[] = "ファイルからバイナリデータを読み込み" mysql_real_query(&mysql, INSERT INTO hoge VALUES (buf);); の2通りの方法を考えました。 しかし、 (1)は非常に手間がかかりますし、 (2)は大きなバイナリデータを扱う場合、メモリオーバーフローが起こる可能性があると思います。 INSERT INTO hoge VALUES ('test.aviの中身') のように、SQL文の中にファイルの中身を取り込む方法はないでしょうか?

その他の回答 (1)

回答No.2

この辺には詳しくないですが、エスケープシーケンスを使わないとだめみたいですよ。 http://dev.mysql.com/doc/refman/5.1/ja/string-syntax.html

fuu-sh
質問者

お礼

回答ありがとうございます。 エスケープは使用していなかったので、使用するように書き換えました。 どうもありがとうございました。

関連するQ&A

  • MySQLでのバイナリデータ削除方法

    MySQLでのバイナリデータ削除方法 現在、PHPとMySQLでデータベースを作っている初心者です。 MySQLに登録したBLOB型のバイナリデータ(jpeg画像)を削除することはできるのでしょうか。 PHPMyAdminではレコード自体は消せますが、バイナリデータについては編集不可となっています。このフィールドのみ空にすることはできるのでしょうか。 考え方、方法などご教示ください。 上書きでNULLをインサートする??のかとも思うのですが、よくわかりません。 MySQL 5.1.34 PHP 5.2.6

    • ベストアンサー
    • MySQL
  • MySQLに画像を格納してperlで取り出す方法

    1:HTMLのフォームから画像(ファイル形式はそのつど変わる)をアップしてもらい   その画像のバイナリデータをMySQLへ格納したい。 2:上記で格納したデータをperlでセレクトして取り出しブラウザに表示させたい。 以上を行う時はどの様なやり方が一般的なのでしょうか?

  • エクセルをMysqlに格納

    いつもお世話になっております。 Linux,mysql,PHP,apacheの環境で試しているのですが、 エクセルデータをアップロードし、MysqlのBLOB型に格納したいと思っております。また、格納したMysqlのエクセルデータをダウンロードできる流れを考えております。 テンポラリファイルをそのままINSERTするとデータは格納されるのですが、抽出したときに文字化けしてしまいます。 エンコード方法など何か指定するのかと思うのですが 調べたのですが見つかりませんでした。 内部エンコードはEUCになっています。 説明不足な点があるかと思いますが、ご教授お願いします。 /*insert時*/ $localfile = file_get_contents($_FILES['userfile']['tmp_name']); $sql = "INSERT INTO TABLE (fileup) VALUES '".$localfile ."'"; /*ダウンロード時*/ header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: inline; filename=\"".date('Ymd')."list.xls\""); echo $binary;//selectで抽出した時のデータ

    • 締切済み
    • PHP
  • DXF形式をOracleに格納する方法が知りたいです。

    CADデータ(DXF形式)をBLOB化し、Oracle8に格納する事ができますか? またその格納方法のさわりを知りたいです。

  • mysqlで長さ無制限の文字列を格納することはできますか?

    mysqlを用いて掲示板を作りたいです。その際に、簡素化のため、掲示板の全てのデータをmysqlに格納したいと思っています。 また、掲示板における本文の部分は、文字列の長さを無制限にするのが妥当だと思います。 しかし、mysqlのマニュアル(http://dev.mysql.com/doc/mysql/ja/BLOB.html)によると、一番大きい型であるLONGBLOB型の記憶容量は 2^32バイトとなっており、それを超える文字列は切り捨てられるとなっています。 そこで、ご教授いただきたいです。 長さ無制限の文字列をmysqlに格納する方法はありますか?そしてその場合はどうすればよいですか? それとも、長さ無制限の文字列をmysqlに格納する方法ははなく、その場合は別ファイルを用意し、そちらに書き込むなどをする必要がありますか? どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLのBLOBにバイナリで格納した画像を表示

    現在PHPを勉強しはじめた初心者です。今 MYSQLのデータベースを利用してUPLOADした画像を表示させたいと思っております。 そこでMYSQLのBLOBに画像を保存出来まではできたのですが、 そこから表示させる方法がどうしても分かりません。。 こちらが今やっていますスクリプトになります。 <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”> <title>画像表示</title> </head> <body> <p>MySQLのBLOBにバイナリで格納した画像を表示してみます。 </p> <?php echo <img src=”image_display.php?id=1”> ?> <?php $conn=mysql_connect('localhost','aaa','pass'); // DB選択 mysql_select_db(”alpha”); // SQL問合せ // このphpを呼び出す際、idを指定 $sql = select * from beta where(id=$_GET[id]); $result = mysql_query($sql); // 問合せ結果を配列にセット $row = mysql_fetch_array($result); echo $row[1]; // テーブルの2列目のカラムを取得 ?> </body> </html> 自分ではいったいなにが悪いのか分かりません。 どのたかお分かりになるかたいましたらご教授していただけませんでしょうか。 お願いします。

  • MySQLにデータを格納する際に文字が化ける

    インターネットでサイトを開いている者です。 ネットのデータをMySQLに格納しようと試みてみましたが、MySQLにデータを格納すると全角データが化けてしまします。MySQLにデータを格納する前は確かに化けていないのですが、MySQLにデータを格納し、中身を確認してみると全部、文字が化けてしまっています。 どうか心当たりの情報をお持ちの方は教えて頂けないでしょうか? お願いします。

  • PHPでMySQLに格納したファイルをダウンロードしたいです。

    MySQLサーバに格納したファイルをPHPを使ってブラウザからファイルをダウンロードするプログラムを作りたいのですが、やり方が分からず困っています。方法もしくは簡単なスクリプトを教えてください。お願いします。 PHPを使ってブラウザからMySQLに画像やファイルをアップロードできたのですが、取り出す方法が分かりません。バイナリデータを取り出してimage srcを用い、ブラウザに画像を表示するまではできました。 テーブルは create table image( ID int not null primary key auto_increment, data MEDIUMBLOB); で作成しています。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • WebサーバとDBサーバを用いてファイルを格納したいです、教えてください。

    PHPとMySQLを使用して、DBにバイナリファイルを格納する方法を考えています。WEB上からバイナリファイルをアップロードしてDBに格納し、後でダウンロードできる仕組みを作りたいです。使用しているサーバはfedora11です。 PHPとDBの連携はできたのですが、バイナリデータの格納方法は探しても見つからなくて困っています。誰か教えてください。

    • ベストアンサー
    • MySQL
  • PHPデータをMYSQLに格納

    こちらのmysqlのフィールドが 1. CREATE TABLE `temp_upload` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL default '',`mime` varchar(255) NOT NULL default '',`image` longblob NOT NULL, `created` timestamp(14) NOT NULL, PRIMARY KEY (`id`)) の場合では下記のコードを入力してBLOBに画像の格納が出来ました。 # // 追加SQL作成 # $sql = sprintf( 'INSERT INTO temp_upload ( name, mime, image ) VALUES ( "%s", "%s", "%s" )', # mysql_real_escape_string( $_FILES['image']['name'] ), # mysql_real_escape_string( $_FILES['image']['type'] ), # mysql_real_escape_string( $image ) ); # # # $result = mysql_query( $sql ); # # header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); # exit; # # } ただしもmysqlのフィールド数がもっとある場合はどのように記述をすればいいのでしょうか。 色々と調べ、なんども変更を加えて試してもみたのですがどうしてもmysqlにデータ・画像が格納されません。 こちらがその全然動かないコードになります。 $sql = sprintf( 'INSERT INTO temp_upload (sname, str_check1, sonohoka, train, ken, add1, stime, holiday, denwa, menu1, menu2,url, picname, mime, image ) VALUES ("$sname","$str_check1", "$sonohoka", "$train", "$ken", "$add1", "$stime", "$holiday", "$denwa", "$menu1", "$menu2","$url", "%s", "%s", "%s" )',     mysql_real_escape_string( $_FILES['image']['picname'] ), mysql_real_escape_string( $_FILES['image']['type'] ), mysql_real_escape_string( $image ) ); $result = mysql_query( $sql ); header( sprintf( 'Location: %s', $_SERVER['SCRIPT_NAME'] ) ); exit; } 大変申し訳ないのですが、どなたかお分かりになるかたご教授お願い出来ませんでしょうか?

    • 締切済み
    • PHP