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);