- ベストアンサー
POSTの値をSQL内で使う場合
某サンプルで次のようなサンプルがありました。 where (isbn like '%$isbn%') たぶん、resister_globals = on の時代に動いていた サンプルだと思います。 Offの場合、これを $_POST[isbn]とやっても動くのですが ''もしくは""でisbnを囲うとしたら、どのようにすると いいのでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
普通に考えるのであれば $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を使ってください。
お礼
ご回答いただいた方々、どうもありがとうございました。 文字列の処理方法はわかりました。 SQLインジェクションの件は、また勉強したいと思います。