クエリ パラメータと変数列名
Java では、JDBC プリペアド ステートメントを使用して、動的列名をクエリで指定されます。残念ながら、プリペアド ステートメントの値として列名を直接設定することはできません。列の値が期待されるためです。
値として列名を指定しようとすると、次のようなクエリが発生します。
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
ただし、必要なクエリは次のようになります。
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
Solution and考慮事項
データベース設計上の問題が発生し、SQL インジェクションの脆弱性のリスクが高まる可能性があるため、この方法で変数列名を使用しないことをお勧めします。代わりに、これらの「列名」を保持する専用のデータベース列を作成し、それに応じてデータを保存することを検討してください。
それでも可変の列名が必要な場合は、回避策として、入力をサニタイズし、SQL 文字列を手動で構築し、引用符で囲むことです。列名を指定し、String#replace() を使用して名前内の引用符をエスケープします。このアプローチでは SQL インジェクションの脆弱性が残る可能性があるため、サニタイズが重要であることに注意してください。
以上がJDBC プリペアドステートメントで動的列名を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。