「WHERE _ IN _」ステートメントについて
SQLite で WHERE IN ステートメントを使用する場合は、次のことを理解することが重要です一般的な問題を避けるための正しい構文と使用法エラー。
構文の問題
提供されたバインディング (パラメーター) の数がプレースホルダー ( ?) ステートメントに記載されています。 SQLite は、IN リスト内の各項目にバインド パラメータ (? または位置パラメータ) を必要とします。
解決策
この問題を修正するには、一致する十分なバインド パラメータを作成します。変数のリスト。これは、文字列補間を使用して実現できます。
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
SQL インジェクションの回避
元のコード スニペットとは異なり、このメソッドは SQL インジェクション攻撃に対して安全です。 SQL ステートメントに適切にバインドされています。
パフォーマンス考慮事項
変数の大きなリストの場合は、一時テーブルを使用する方が効率的である可能性があります。値を保持する一時テーブルを作成し、バインド パラメーターを含む IN 句ではなく、一時テーブルに対して JOIN を使用します。
以上がSQLite で WHERE IN ステートメントを正しく使用してエラーや SQL インジェクションを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。