複雑なユーザー指定の WHERE 句があり、PDO と MySQL を使用するシナリオのベスト プラクティスは何ですか?
ユーザーは、クエリを実行するテーブルの 1 つ以上の列に対して 1 つ以上の選択基準を指定できる必要があります。PHP の末尾にある case ステートメントで予測するには、可能な組み合わせが多すぎます。一方、条件を直接入力できるようにすると、パラメーター化されたクエリが SQL インジェクション攻撃に対して提供するはずの保護が無効になります。
私はこの男がしたことを正確にやろうとしています:
複数のWHERE句を使用してMySQLクエリを実行するにはどうすればよいですか?
...ただし、私は良い小さな codemonkey になり、php_mysql の代わりに PDO を使用し、文字列のサニタイズに依存しないようにしています。
ああ、もう 1 つ:
[column, operator, value]
ユーザーが指定した各基準を配列として渡すことができると思います(例: [ "age", ">", "30" ]
)。その配列の最初の 2 つの要素がそれぞれ有効な列名と演算子名と正確に一致することを確認し、最後の要素を強制的に数値にしてから、PHP スクリプトの WHERE 句を含む文字列に追加することができました。しかし、次のような基準は["fullname","like","M_rty M%cFly"]
どうでしょうか? さて、ユーザー作成文字列のサニタイズに戻りましたね。