Tegnene _ og % skal citeres for at blive matchet bogstaveligt i en LIKE-sætning, der er ingen vej udenom. Valget handler om at gøre det på klientsiden eller serversiden (typisk ved at bruge SQL replace(), se nedenfor). Også for at få det 100 % rigtigt i det generelle tilfælde, er der et par ting at overveje.
Som standard er anførselstegn, der skal bruges før _ eller %, omvendt skråstreg (\), men det kan ændres med en ESCAPE-klausul umiddelbart efter LIKE-sætningen. Under alle omstændigheder skal citationstegnet gentages to gange i mønsteret for at blive matchet bogstaveligt som ét tegn.
Eksempel:... WHERE field like 'john^%node1^^[email protected]%' ESCAPE '^'
ville matche john%node1^[email protected] efterfulgt af noget.
Der er et problem med standardvalget af omvendt skråstreg:det bruges allerede til andre formål, når standard_conforming_strings er FRA (PG 9.1 har det ON som standard, men tidligere versioner er stadig i udbredt brug, dette er et punkt at overveje).
Hvis citeringen for LIKE jokertegn udføres på klientsiden i et brugerinput-injektionsscenario, kommer det udover til den normale streng-citering, der allerede er nødvendig ved brugerinput.
Et blik på et go-pgsql-eksempel fortæller, at det bruger pladsholdere i $N-stil til variabler... Så her er et forsøg på at skrive det på en generisk måde:det fungerer med standard_conforming_strings både TIL eller FRA, bruger erstatning på serversiden af [%_], et alternativt citattegn, citering af citattegn, og undgår sql-injektion:
db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
variable_user_input);