PreparedStatement の入力パラメータとして列名を使用する
Java データベース アプリケーションでは、SQL ステートメントを動的に実行するために PreparedStatement が使用されます。ただし、よくある疑問が生じます: 列名を入力パラメータとして指定できますか?この記事では、この問題について調査し、回答を提供します。
Background
PreparedStatement を使用すると、特定の値をパラメータとして設定でき、SQL インジェクション攻撃を防ぐことができます。ただし、デフォルトでは、パラメータとして設定できるのは列の値のみです。
問題
ユーザーは 2 つのテーブル (A と B) を結合するクエリを作成したいと考えています。そして、テーブル A の X 列と入力パラメータとの比較に基づいて結果をフィルタリングします。ただし、ユーザーはこのパラメータをテーブル B の Y 列にしたいと考えています。
解決策
Java データベース接続 API である JDBC では、 PreparedStatements の入力パラメータとして列名を使用します。パラメーターとして指定できるのはリテラル値またはバインド変数のみです。
したがって、PreparedStatement を直接使用して目的の機能を実現することはできません。代わりに、PreparedStatement を作成する前に、Y 列の値をリテラルとして含めるように SQL ステートメントを変更する必要があります。これには SQL 文字列を手動で構築する必要がありますが、SQL インジェクション攻撃のリスクがあるため推奨されません。
代替ソリューション
SQL インジェクションを回避するには、次のことをお勧めします。次のような代替アプローチを使用します。
以上がJava PreparedStatements で列名を入力パラメータとして使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。