Seite 1 von 1
sqlite3 und prepared statements
Verfasst: Donnerstag 11. Juli 2013, 18:30
von darktrym
Wieso funktionieren eigentlich prepared statements nicht bei create?
Als Beispiel:
Code: Alles auswählen
import sqlite3
conn = sqlite3.connect("test.db")
cur = conn.cursor()
cur.execute("create table ?(bla int)", ("db",))
conn.close()
sqlite3.OperationalError: near "?": syntax error
Re: sqlite3 und prepared statements
Verfasst: Donnerstag 11. Juli 2013, 18:47
von BlackJack
@darktrym: Die Platzhalter sind ausschliesslich für Werte.
Re: sqlite3 und prepared statements
Verfasst: Donnerstag 11. Juli 2013, 19:09
von darktrym
D.h. wenn ich diese Funktionalität benötige muss ich die Anfrage selbst zusammenbasteln, wovor die Hilfe Seiten ja warnen.
Re: sqlite3 und prepared statements
Verfasst: Donnerstag 11. Juli 2013, 19:21
von Hyperion
darktrym hat geschrieben:D.h. wenn ich diese Funktionalität benötige muss ich die Anfrage selbst zusammenbasteln, wovor die Hilfe Seiten ja warnen.
Ja musst Du. Aber wenn Du nicht gerade ein Web basiertes DB-Management-Tool schreibst, brauchst Du so etwas ja idR. auch nie.
In diesem Falle könntest Du Dir die Namensbeschränkungen von SQLite bei Tabellennamen zunutze machen, den eigegebenen Ausdruck entsprechend gegen diese Konvention zu parsen. Damit sollte es kaum möglich sein, eine SQL-Injection durchzuführen.
Und Du kannst diese Stelle über Autorisierung absichern, so dass nicht jeder 0815-Benutzer diesen Code überhaupt aktivieren kann.