MySQL パラメータ化クエリはどうすれば実現できますか。
MySQLのパラメータ化クエリは、プリペアドステートメントを使用することで実現される。プリペアドステートメントは、サーバー上で準備・コンパイルされたSQL文のテンプレートであり、パラメータはプレースホルダーを使用して置換される。実行時には、実際の引数値がプレースホルダーにバインドされ、プリペアドステートメントが実行される。
パラメータ化クエリを使用する例を以下に示します。
// 创建预处理语句模板
String query = "SELECT * FROM users WHERE id = ?";
PreparedStatement statement = connection.prepareStatement(query);
// 绑定参数值
int userId = 1;
statement.setInt(1, userId);
// 执行查询
ResultSet resultSet = statement.executeQuery();
// 处理结果集
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
System.out.println("ID: " + id + ", Username: " + username);
}
// 关闭连接和语句
resultSet.close();
statement.close();
上記の例では、まずプレースホルダー?(パラメーターを表す)を使用したプリペアドステートメントテンプレートを作成します。次に、プレースホルダーに actual parameter value (XX はパラメーターのタイプを表す)をバインドするために、setXX()メソッドが使われます。最後に、プリペアドステートメントを実行して、結果セットを処理します。
パラメータ化のクエリを使用することで、SQLインジェクション攻撃を効果的に防ぎ、クエリのパフォーマンスを向上させます。これはプリペアード・ステートメントは一度だけコンパイルすればよく、何度でも実行できるためです。