Heim >Datenbank >MySQL-Tutorial >Wie kann ich WHERE IN-Anweisungen in SQLite korrekt verwenden, um Fehler und SQL-Injection zu vermeiden?
„WHERE _ IN _“-Anweisungen verstehen
Bei der Verwendung von WHERE IN -Anweisungen in SQLite ist es wichtig zu verstehen die richtige Syntax und Verwendung, um häufige Fehler zu vermeiden.
Die Syntax Problem
Der bereitgestellte Beispielcode führt zu einem „ProgrammingError“, da die Anzahl der bereitgestellten Bindungen (Parameter) nicht mit der Anzahl der Platzhalter (?) in der Anweisung übereinstimmt. SQLite erwartet einen Bind-Parameter (? oder einen Positionsparameter) für jedes Element in der IN-Liste.
Lösung
Um dieses Problem zu beheben, erstellen Sie ausreichend passende Bind-Parameter die Liste der Variablen. Dies kann durch String-Interpolation erreicht werden:
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars))) c.execute(statement, list_of_vars)
SQL-Injection vermeiden
Im Gegensatz zum ursprünglichen Code-Snippet ist diese Methode aufgrund der Variablen sicher gegen SQL-Injection-Angriffe sind ordnungsgemäß an die SQL-Anweisung gebunden.
Leistung Überlegungen
Bei großen Variablenlisten kann die Verwendung einer temporären Tabelle effizienter sein. Erstellen Sie eine temporäre Tabelle, um die Werte zu speichern, und verwenden Sie dann einen JOIN für die temporäre Tabelle anstelle einer IN-Klausel mit Bindungsparametern.
Das obige ist der detaillierte Inhalt vonWie kann ich WHERE IN-Anweisungen in SQLite korrekt verwenden, um Fehler und SQL-Injection zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!