人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【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文書かれたら、やばいかなとも思ったり。。。)

●質問者: PEPOTA
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:access blob dB MS MySQL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tadashi0805
●60ポイント

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

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

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

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

◎質問者からの返答

なるほど。

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ