【PHP PEAR:DB + MySQL】


Cent OS 4.4
PHP 4.3.x
MySQL 4.1.x

を使用しています。


データベース周りには、PEAR::DBを使用しています。

テーブルにblob型でフィールドを作り、
バイナリデータをPEAR::DBを使って入れようと試みました。

問題なく入れることが可能なファイルと、入れられないアフィルがあります。

ms accessのデータなどが入れられませんでした。


なんとなく、PEAR::DBがバイナリデータをエスケープしているためかなと思ったのですが、
詳しく調べていません。

オープンソース系でPEAR::DBを使用しているのを落としてきて、
どんな感じの処理をしているのかな?と覗いてみたのですが、
base64_encodeしているようでした。

これだと、サーバに負荷がかかっちゃうなと思ったので、
できれば、直接バイナリデータを入れられるに越したことはありません。

PEAR::DBを使用して、直接データを入れる方法があれば教えてください。

(ふと疑問:直接放り込めるようにしたとき、エスケープしないで入れたら、テキストファイルをアップされて、中にSQL文書かれたら、やばいかなとも思ったり。。。)

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/11/13 13:40:08
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:tadashi0805 No.1

回答回数287ベストアンサー獲得回数29

ポイント60pt

ファイルから読み込んだ内容に対して、一旦mysql_escape_string()に食わせた結果得られる値を用いて、クエリを組み立ててみてはいかがでしょうか。

MS Accessのデータだと、おそらく文字コードがSJISだと思いますが、SJISだと文字コード0x40~0x7Eの範囲を取り得ます。この中にはエスケープしなければいけない ' が含まれます。

それ以外にもバイナリデータ(0x00、0x0A、0x0Dなど)もエスケープしなければなりません。

これらが混入していてエスケープせずに、そのままの値でクエリを組み立てると、blob型カラムに入れるとは言え、クエリ不正としてエラーになってしまいます。

id:keijiro

なるほど。

そもそも、バイナリでもエスケープは必要なんですよね。

今まで、問題なく行けていた(ような気がしていた)のは、

画像データだけのアップロードにする処理自体をスクリプト側で書いていたからということに気付きました。。。

2007/11/06 20:07:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません