• ベストアンサー

POSTの値をSQL内で使う場合

某サンプルで次のようなサンプルがありました。 where (isbn like '%$isbn%') たぶん、resister_globals = on の時代に動いていた サンプルだと思います。 Offの場合、これを $_POST[isbn]とやっても動くのですが ''もしくは""でisbnを囲うとしたら、どのようにすると いいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

普通に考えるのであれば $where = " WHERE isbn LIKE '%".$_POST["isbn"]."%'"; こうなります SQLインジェクションできる書き方 使い方ですので、実際にこのコードを使ったらセキュリティ的には穴だらけだと思ってください。 本来ならば、プリペアドステートメントとか使うので実際にはこんな書き方しませんけどね。

その他の回答 (1)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

文字列内の変数展開ですね。 "where (isbn like '%{$_POST[isbn]}%')" のように、{ }で変数の範囲を明確にしてあげれば、PHPで、どこまでが変数か理解できます。 文字列の連結でもできますが、可読性はこちらの方がいいかも? ただ、SQLインジェクションの危険があるとのinu2さんの指摘はもっともです。 DBのアクセスに何をお使いかによって、変わってきますが、prepare、executeを使って、2段階実行をするか、PEAR::DBでしたら、3引数のqueryを使ってください。

tss_jp
質問者

お礼

ご回答いただいた方々、どうもありがとうございました。 文字列の処理方法はわかりました。 SQLインジェクションの件は、また勉強したいと思います。

関連するQ&A

専門家に質問してみよう