Übereinstimmende Escape-Zeichenfolgen in PostgreSQL
In PostgreSQL kann die Verwendung des LIKE-Operators zum Abgleichen von Mustern problematisch werden, wenn es um Sonderzeichen wie „_“ geht. ' Und '%'. Diese Zeichen können mit Platzhaltern übereinstimmen und zu unbeabsichtigten Ergebnissen führen. Um eine wörtliche Übereinstimmung sicherzustellen, ist es wichtig, sie richtig zu maskieren.
Das für LIKE verwendete Escape-Zeichen ist normalerweise der Backslash (), der zweimal wiederholt werden sollte, um ein einzelnes Escape-Zeichen im Muster darzustellen. Beispielsweise würde „rob_“ das Zeichen „_“ maskieren, sodass nur Zeichenfolgen gefunden werden können, die buchstäblich mit „rob_“ beginnen. In PostgreSQL 9.1 kann sich das Standard-Escape-Zeichen jedoch abhängig von der Einstellung „standard_conforming_strings“ ändern.
Um potenzielle Probleme zu vermeiden, wird empfohlen, die REPLACE-Funktion zu verwenden, um Sonderzeichen serverseitig durch ihre maskierten Entsprechungen zu ersetzen. Dieser Ansatz ist sicherer als die Handhabung des Escapezeichens auf der Clientseite, da keine zusätzliche Validierung der Benutzereingaben erforderlich ist.
Zum Beispiel würde die folgende Abfrage alle Instanzen von „_“ und „%“ durch ersetzen ihre entkommenen Gegenstücke und führen dann den LIKE-Vergleich durch, um sicherzustellen, dass das Muster wörtlich übereinstimmt:
SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'
Durch die Verwendung serverseitiger Ersetzungen können Sie genaue und eindeutige Muster sicherstellen Matching unter Vermeidung potenzieller Sicherheitslücken.
Das obige ist der detaillierte Inhalt vonWie kann man mit LIKE in PostgreSQL maskierte Zeichenfolgen sicher abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!