mysql:836
From: "MINOHATA Norio" <"MINOHATA Norio" <minohata@xxxxxxxxxx>>
Date: Fri, 23 Apr 1999 10:55:55 +0900
Subject: [mysql 00836] Re: How to use blob ?
はじめまして。箕畑と申します。 > スクリプトを経由(Web_server + perl or Web_server + PHP 等)して、 > データを出し入れすると仮定しますと、例えば perlの例だと > > $id = 1; > $setumei = 'ドラエモンの絵だよ'; > $/ = undef; > open(IN, "doraemon.jpg"); $nandemo = <IN>; close(IN); > $sql_cmd = qq#INSERT INTO pocket (id, setumei, nandemo) VALUES > ("$id", "$setumei", "$nandemo");# > > こんな感じで良いのでしょうか? perlでDBI/DBDインターフェースを使用している場合、 バイナリを扱う/扱わないに関わらず次のようにすれば安全確実です。(多分) -----ここから----- $dbh = DBI->connect(...); #MySQLに接続 ... #$id,$nandemo,$setumeiにデータを入れる $qid = $dbh->quote($id); $qnandemo = $dbh->quote($nandemo); $qsetumei = $dbh->quote($setumei); $sth = $dbh->do(<<"_SQL_"); INSERT INTO pocket (id,setumei,nandemo) VALUES($qid, $qsetumei, $qnandemo) _SQL_ -----ここまで----- $dbh->quote()は、特殊文字をエスケープシーケンスに変換した上で 両端に'(引用符)を付加した文字列を生成してくれます。 上の例では、$id,$nandemoまでも $dbh->quote()してますが、 「$id,$nandemoには絶対に特殊文字が入ってないよん」という自信があれば、 # あるいは、利用者に対して #「特殊文字の入力禁止!! 入れた者は厳重に処罰する」と #宣言すれば(宣言できるほど強い立場であれば(^^;)、 $dbh->quote()する必要はありません。 この辺については、プログラムの実装効率(作る手間)&安全性と 実行効率(処理スピード)を天秤にかけることになりますね。 また、$dbh->quote()を使用しない場合は、 $qsetumei = $setumei; $qsetumei =~ s/\\/\\\\/g; #\を\\に置換 $qsetumei =~ s/\0/\\0/g; #NULL文字を \0 に置換 $qsetumei =~ s/\'/\\\'/g; #'を \'に置換 $qsetumei =~ s/\"/\\\"/g; #"を \"に置換 $qsetumei = "'$qsetumei'";#両端に'を付加 とすれば大丈夫なはずです。(未確認ですが) PHPに関しては全く無知ですが、多分同じようにできると思います。 # 私のところでは、perlのStorableモジュールで # オブジェクトをシリアル化して他のサーバに投げる # といった処理をすることが多いので、 # MySQLのBLOBと$dbh->quoteは重宝しています。 # (といってもまだ試験段階のシステムですけど) 詳しくは、MySQLのマニュアルの 7.1.1 文字列 18.5 MySQL Perl API あたりを、またperl固有の問題に関しては perldoc DBI をご覧下さい。 -- 有限会社アイピーシー/旭紙業株式会社 箕畑典男 minohata@xxxxxxxxxx
821 1999-04-22 05:18 [Sakae Kobayashi <sak] How to use blob ? 827 1999-04-22 11:36 ┗[IMAI Kenichi <kimai@] 831 1999-04-23 07:54 ┗[Sakae Kobayashi <sak] 835 1999-04-23 10:23 ┣["osamura" <o@xxxxxxx] -> 836 1999-04-23 10:55 ┗["MINOHATA Norio" <mi] 837 1999-04-24 23:06 ┗[Sakae Kobayashi <sak]