• ベストアンサー

addslashesによるエスケープ

フォームからのデータをデータベースに登録する際、addslashesを使用して登録データをエスケープしています。 SJISでデータを処理しているのですが、addslashesでエスケープする際に最後がエスケープされるデータの時困っています。 例えば登録したいデータが「サンプル表」などの時、addslashesすると INSERT INTO ・・・・, 'サンプル表\', ・・・ とINSERT文ができるのですが、これだとエラーが出ます。 こういう場合、皆さんはどのような処理をされているのでしょうか? 今は、エスケープする必要のあるデータ処理には INSERT INTO ・・・・, 'サンプル表\ ', ・・・ のように半角スペースを入れて、データを抽出した際、末尾の半角スペースを取り除いています。 他に思いつくのは、登録するデータをエスケープした際に末尾が「\」かどうか調べて、「\」の場合半角スペースなどを挿入するという方法などです。 もっといい処理があれば、ご教授いただければと思います。 よろしくお願いいたします。 長文ですみません。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

mysqlで直接INSERT INTO ・・・・, 'サンプル表\', ・・・ を入力した場合はエラーになりません phpで"INSERT INTO ・・・・, 'サンプル表\', ・・・" と引用符で囲む場合は下記のようにさらにエスケープを追加する必要があります "INSERT INTO ・・・・, 'サンプル表\\\', ・・・" (php側で1回エスケープ処理され、さらにmysql側で1回エスケープ処理されるため)

fedorars
質問者

お礼

ありがとうございます。 なかなか文字コードのところは悩むところが多くて・・・ よく理解できました。 本当にありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

SJISの「表」はいろんなところで問題がでるため、 やはりEUCなどでデータを管理するのが安全かつ 効率的なのですけどね。

fedorars
質問者

お礼

EUCでできればいいんですけど、そうできない都合があって・・・ ありがとうございました。

関連するQ&A

専門家に質問してみよう