IN クエリの安全な処理: WHERE IN ステートメントを理解する
データベース クエリを使用する場合、値のセットに基づいて特定のレコードを取得することは一般的な要件です。 WHERE IN ステートメントは、これを実現する効率的な方法を提供します。
データベース スキーマとインテント
次のデータベースについて考えてみましょう。 table:
CREATE TABLE IF NOT EXISTS tab (_id integer PRIMARY KEY AUTOINCREMENT, obj text NOT NULL);
obj 列が含まれるレコードを取得しようとしていますvalue は変数のリストと一致します。変数は適切に処理されないと SQL インジェクションに対して脆弱になる可能性があります。
最初のアプローチ: 手動による方法
list_of_vars を使用して手動でクエリを構築しようとしています。プレースホルダー文字列を生成するための join() と、その数の不一致によりエラーがスローされる場合があります。 bindings.
statement = "SELECT * FROM tab WHERE obj IN (?);" c.execute(statement, "'"+"','".join(list_of_vars)+"'")
推奨されるアプローチ: パラメーター化されたクエリ
IN クエリを安全に実行するには、パラメーター プレースホルダー (?) を使用し、変数のリストをパラメーターとしてバインドします。 format メソッドを使用してステートメントを作成し、適切な数のプレースホルダーを生成します。
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
パラメーター値リストとして list_of_vars を渡すことで、適切なバインドが確保され、SQL インジェクションの脆弱性が防止されます。
以上がSQL インジェクションを防ぐために WHERE IN ステートメントを安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。