Wie die Abfrage den Spaltennamen dynamisch, mit Postgres/NpgSQL
Ich habe ein filter-Objekt, um Abfragen einer Tabelle mit vielen Spalten, und anstatt zu schreiben, eine Bedingung, die alle Spalten (so dass für die optionale Filterung) wie folgt:
WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
für jede Spalte. Stattdessen würde ich im Idealfall würde ich mag in der Lage sein, um übergeben Sie den Namen des Feldes als parameter:
WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
ist nicht möglich, da die Spalten sind erforderlich zur Analysezeit (ähnlich wie diese Antwort die hier gegeben werden).
Wie überwinden Sie diese? - Ich weiß nicht wirklich wollen, um die Pflege der SQL wenn neue Spalten Hinzugefügt oder entfernt (wie in meinem ersten Beispiel) und ich denke, es wäre gefährlich für mich zu konstruieren, die den Spaltennamen in der Kommando-string direkt, da dies vielleicht ermöglichen sql-injection.
Beachten Sie, dass dieser code ist hinter einem web service.
- Warum tun Sie oft brauchen, um Spalten hinzufügen oder entfernen? Welchen guten Grund gibt es für eine solche Notwendigkeit?
- Ich brauche das nicht zu tun dies oft. Ich wollte nur nicht zur Verwaltung der sql in meine filter-Objekt für jede änderung in meiner Datenbank und zur gleichen Zeit bieten ein flexibles Objekt, das zum filtern von Daten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur sicherstellen, dass Endbenutzer nicht die Spaltennamen direkt und Sie sollten sicher sein, bei der Konstruktion der Abfrage manuell. Wenn Sie brauchen, um herauszufinden, welche Spalte die Namen sind gültig für Laufzeit Sie können die folgende Abfrage verwenden:
Ich denke, die einfachste Lösung ist zum erstellen der SQL-Anweisung on-the-fly.
SQL-injection ist nicht möglich, wenn man die Parameter für den Benutzer zur Verfügung gestellten Daten.
Beispiel: