Heim >Backend-Entwicklung >Golang >Wie kann ich einen literalen Mustervergleich in PostgreSQL-LIKE-Ausdrücken mit nicht validierten Benutzereingaben erreichen?
Literaler Musterabgleich in PostgreSQL-LIKE-Ausdrücken für nicht validierte Benutzereingaben
Beim Abgleichen von Benutzereingaben mit einem LIKE-Muster in PostgreSQL ist die Escape-Funktion unbedingt erforderlich Sondermusterzeichen wie „_“ und „%“, um eine wörtliche Übereinstimmung sicherzustellen. PostgreSQL erfordert, dass diese Zeichen mit dem Backslash () oder einem benutzerdefinierten Escape-Zeichen, das mit der ESCAPE-Klausel definiert wird, in Anführungszeichen gesetzt werden.
Um beispielsweise „rob“ wörtlich zu finden, müssten Sie alle Benutzereingaben mit Unterstrichen oder maskieren Prozentzeichen. Allerdings gibt es hier eine potenzielle Gefahr: Wenn Ihre Benutzereingabe auch Backslashes enthält, müssen diese ebenfalls maskiert werden. Dies kann komplex werden und zu Fehlern führen.
Serverseitige Lösung
Um dies elegant zu handhaben, können Sie die Funktion „replace()“ von PostgreSQL nutzen, um Sonderzeichen durch ihre zu ersetzen entkommene Versionen. Dieser Ansatz hat mehrere Vorteile:
Um beispielsweise wörtlich nach „rob“ zu suchen, könnten Sie die folgende Abfrage verwenden:
SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'
In dieser Abfrage:
Fazit
Durch die Verwendung serverseitiger Ersetzung und eines benutzerdefinierten Escape-Zeichens können Sie eine wörtliche Musterübereinstimmung sicherstellen in PostgreSQL-LIKE-Ausdrücken für nicht validierte Benutzereingaben. Dieser Ansatz ist robust, vermeidet Injektionsschwachstellen und vereinfacht den Code.
Das obige ist der detaillierte Inhalt vonWie kann ich einen literalen Mustervergleich in PostgreSQL-LIKE-Ausdrücken mit nicht validierten Benutzereingaben erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!