Verwendung von SQL-Platzhaltern und LIKE-Operatoren in Python-Stringformaten
Das Einfügen von SQL-Platzhaltern und LIKE-Operatoren in Python-Stringformate kann eine Herausforderung sein. Dieser Artikel bietet eine Lösung für häufige Fehler, die beim Versuch auftreten, MySQL-Abfragen mit MySQLdb auszuführen.
Fehler von MySQLdb
Bei Versuch 3 und 4 wurden Fehler von MySQLdb zurückgegeben, die Folgendes anzeigen: Nicht genügend Argumente für Formatzeichenfolge.“ Dies liegt daran, dass das %-Zeichen vom String-Formatierungsoperator in Python als Formatbezeichner interpretiert wird.
Anfälligkeit für SQL-Injection
Die ersten vier gezeigten Versuche sind anfällig für SQL-Injection-Angriffe. Benutzereingaben, wie etwa die Abfragevariable, sollten bereinigt oder maskiert werden, um zu verhindern, dass bösartiges SQL ausgeführt wird.
Richtiger Ansatz
Der empfohlene Ansatz ist die Verwendung eines Platzhalters statt String-Formatierung. Hier ist ein Beispiel:
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
Zwei Argumente werden anexecute() übergeben:
Dieser Ansatz stellt sicher, dass die SQL-Anweisung gültig und vor SQL geschützt ist Injektion.
Das obige ist der detaillierte Inhalt vonWie kann man SQL-Platzhalter sicher mit Pythons „MySQLdb' verwenden, um Injektionen zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!