アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPのPDOを用いて、mysqlにクエリを発行する際、
prepare() と bindParam() でエスケープをしています。

しかし、フィールド名やテーブル名をエスケープしようとした場合、
プリペアドステートメントを利用することができません。

例えば
「SELECT * FROM table WHERE {$sample} = :test」
のような状態です。

このような場合、どうやって変数部分を安全にエスケープすべきなのでしょうか?

A 回答 (2件)

フィールド名やテーブル名が動的に変わると言うことですよね。

そういう必要が無いように設計を根本から見直すというのが正しい対処法だと思います。

あらかじめテーブル名一覧、フィールド名一覧を用意して、それらと完全一致するかどうかを判断するのでしょうかね。
    • good
    • 1

まずフィールド名をエスケープする意味とは?


このフィールド名の変数の何からセットされるのですか?

通常ではフィールド名をエスケープさせる意味が無いと思いますが...

また、PreparedでSQLを実行してるのに、わざわざエスケープさせるのですか?

ちょっと、何をされようとしているのか意図が見えません。

この回答への補足

実際には連想配列のキーをフィールドとしてセットする予定ですが、
セッションから渡すので万一書き換えられた場合のことを考慮しなくていいのか不安だったのです。

補足日時:2012/06/21 08:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!