Dynamische Abfrage von Spaltennamen mit Postgres / NpgSQL

7

Ich habe ein Filterobjekt, um eine Tabelle mit vielen Spalten abzufragen, und statt eine Bedingung zu schreiben, die alle Spalten abdeckt (optionale Filterung möglich):

%Vor%

für jede Spalte. Stattdessen würde ich im Idealfall den Feldnamen als Parameter übergeben können:

%Vor%

was nicht möglich ist, da die Spalten zum Parsen benötigt werden (ähnlich wie bei dieser Antwort hier angegeben).

Wie überwinden Sie das? - Ich möchte das SQL nicht wirklich pflegen müssen, wenn neue Spalten hinzugefügt oder entfernt werden (wie in meinem ersten Beispiel) und ich denke Es wäre gefährlich für mich, die Spaltennamen direkt in die Befehlszeichenfolge zu schreiben, da dies die SQL-Injektion ermöglichen könnte.

Beachten Sie, dass dieser Code hinter einem Webdienst steht.

    
Mr Shoubs 07.04.2011, 16:57
quelle

3 Antworten

23

Stellen Sie nur sicher, dass Endbenutzer die Spaltennamen nicht direkt angeben können und dass Sie beim manuellen Erstellen der Abfrage sicher sein sollten. Wenn Sie herausfinden müssen, welche Spaltennamen zur Laufzeit gültig sind, können Sie die folgende Abfrage verwenden:

%Vor%     
Eelke 07.04.2011, 17:19
quelle
1

Ich denke, die einfachste Lösung besteht darin, die SQL-Anweisung im laufenden Betrieb zu erstellen.

Die SQL-Injektion ist nicht möglich, wenn Sie Parameter für vom Benutzer bereitgestellte Daten verwenden.

    
Thomas Mueller 07.04.2011 17:23
quelle
0

Beispiel:

%Vor%     
Oberdan 21.10.2013 11:03
quelle