- ベストアンサー
PHP prepare フィールド名をエスケープ
PHPのPDOを用いて、mysqlにクエリを発行する際、 prepare() と bindParam() でエスケープをしています。 しかし、フィールド名やテーブル名をエスケープしようとした場合、 プリペアドステートメントを利用することができません。 例えば 「SELECT * FROM table WHERE {$sample} = :test」 のような状態です。 このような場合、どうやって変数部分を安全にエスケープすべきなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フィールド名やテーブル名が動的に変わると言うことですよね。そういう必要が無いように設計を根本から見直すというのが正しい対処法だと思います。 あらかじめテーブル名一覧、フィールド名一覧を用意して、それらと完全一致するかどうかを判断するのでしょうかね。
その他の回答 (1)
- singlecat
- ベストアンサー率33% (139/418)
回答No.2
まずフィールド名をエスケープする意味とは? このフィールド名の変数の何からセットされるのですか? 通常ではフィールド名をエスケープさせる意味が無いと思いますが... また、PreparedでSQLを実行してるのに、わざわざエスケープさせるのですか? ちょっと、何をされようとしているのか意図が見えません。
補足
実際には連想配列のキーをフィールドとしてセットする予定ですが、 セッションから渡すので万一書き換えられた場合のことを考慮しなくていいのか不安だったのです。