[前][次][番号順一覧][スレッド一覧]

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]