Feldname als Paramter übergeben?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

Hi.

Ich möchte einen Feldnamen folgendermaßen als Parameter übergeben:


DB.execute("UPDATE `tabelle` SET ? = ? WHERE id = ?",(feld,wert,id) )

Was ist daran der Fehler?

Es meldet mir ein falsches ? im Query.
BlackJack

Die Platzhalter funktionieren nur für Werte. Alles was über Platzhalter eingefügt wird, wird entsprechend "escaped" und das darf man bei Namen nicht machen, weil dann kein gültiges SQL mehr heraus kommt.

Tabellen- oder Spaltennamen weiss man normalerweise ja auch wenn man die SQL-Anweisung schreibt. Falls nicht, musst Du den Namen per Zeichenkettenformatierung einfügen.

Code: Alles auswählen

DB.execute('UPDATE tabelle SET %s = ? WHERE id = ?' % feld, (wert, id))
Mit so etwas sollte man vorsichtig sein und auf keinen Fall Eingaben von aussen ungeprüft übernehmen.
Antworten