• ベストアンサー

PHP prepare フィールド名をエスケープ

PHPのPDOを用いて、mysqlにクエリを発行する際、 prepare() と bindParam() でエスケープをしています。 しかし、フィールド名やテーブル名をエスケープしようとした場合、 プリペアドステートメントを利用することができません。 例えば 「SELECT * FROM table WHERE {$sample} = :test」 のような状態です。 このような場合、どうやって変数部分を安全にエスケープすべきなのでしょうか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10357)
回答No.1

フィールド名やテーブル名が動的に変わると言うことですよね。そういう必要が無いように設計を根本から見直すというのが正しい対処法だと思います。 あらかじめテーブル名一覧、フィールド名一覧を用意して、それらと完全一致するかどうかを判断するのでしょうかね。

その他の回答 (1)

  • singlecat
  • ベストアンサー率33% (139/418)
回答No.2

まずフィールド名をエスケープする意味とは? このフィールド名の変数の何からセットされるのですか? 通常ではフィールド名をエスケープさせる意味が無いと思いますが... また、PreparedでSQLを実行してるのに、わざわざエスケープさせるのですか? ちょっと、何をされようとしているのか意図が見えません。

django13
質問者

補足

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

関連するQ&A

専門家に質問してみよう