sql >> Database >  >> RDS >> PostgreSQL

Hoe te ontsnappen aan een string terwijl het patroon overeenkomt in PostgreSQL

De tekens _ en % moeten tussen aanhalingstekens staan ​​om letterlijk overeen te komen in een LIKE-instructie, er is geen manier om dit te omzeilen. De keuze is om het client-side of server-side te doen (meestal met behulp van de SQL Replace(), zie hieronder). Ook om het in het algemeen 100% goed te krijgen, zijn er een paar dingen waarmee u rekening moet houden.

Het aanhalingsteken dat vóór _ of % moet worden gebruikt, is standaard de backslash (\), maar deze kan worden gewijzigd met een ESCAPE-clausule die onmiddellijk volgt op de LIKE-clausule. In elk geval moet het aanhalingsteken twee keer worden herhaald in het patroon om letterlijk als één teken overeenkomen.

Voorbeeld:... WHERE field like 'john^%node1^^[email protected]%' ESCAPE '^' zou overeenkomen met john%node1^[email protected] gevolgd door iets.

Er is een probleem met de standaardkeuze van backslash:het wordt al voor andere doeleinden gebruikt wanneer standard_conforming_strings UIT staat (PG 9.1 heeft het standaard AAN, maar eerdere versies worden nog steeds veel gebruikt, dit is een punt om te overwegen).

Ook als het citeren voor LIKE-wildcard aan de clientzijde wordt gedaan in een scenario voor injectie van gebruikersinvoer, komt dit naast naar de normale string-quoting die al nodig is bij gebruikersinvoer.

Een blik op een go-pgsql-voorbeeld leert dat het $N-stijl placeholders voor variabelen gebruikt... Dus hier is een poging om het op een of andere manier generieke manier te schrijven:het werkt met standard_conforming_strings zowel AAN als UIT, gebruikt server-side vervanging van [%_], een alternatief aanhalingsteken, citeren van het aanhalingsteken, en vermijdt sql-injectie:

   db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
     variable_user_input);


  1. SQL Server 2016:Queryresultaten opslaan in een CSV-bestand

  2. Naam van SQL Server-variabele kolommen?

  3. Microsoft Access Table Tips – Trucs &Richtlijnen Deel 2

  4. Hoe HTML-tags van een tekenreeks in SQL Server te verwijderen?