Знаците _ и % трябва да бъдат цитирани, за да се съпоставят буквално в израз LIKE, няма начин да го заобиколите. Изборът е да го направите от страна на клиента или от страна на сървъра (обикновено с помощта на SQL replace(), вижте по-долу). Освен това, за да стане 100% правилно в общия случай, трябва да вземете предвид няколко неща.
По подразбиране символът за кавички, който се използва преди _ или %, е обратната наклонена черта (\), но може да бъде променен с клауза ESCAPE непосредствено след клаузата LIKE. Във всеки случай знакът за кавички трябва да се повтори два пъти в шаблона, за да да се съпоставят буквално като един знак.
Пример:... WHERE field like 'john^%node1^^[email protected]%' ESCAPE '^'
ще съответства на john%node1^[email protected] последвано от всичко.
Има проблем с избора по подразбиране на обратна наклонена черта:тя вече се използва за други цели, когато standard_conforming_strings е ИЗКЛЮЧЕНО (PG 9.1 го има ВКЛЮЧЕНО по подразбиране, но предишните версии все още са широко използвани, това е важно да се вземе предвид).
Също така, ако цитирането на заместващия знак LIKE се извършва от страна на клиента в сценарий на инжектиране на потребителски вход, то идва в допълнение към към нормалното цитиране на низове, което вече е необходимо при въвеждане на потребителя.
Един поглед към примера на go-pgsql показва, че той използва заместители в стил $N за променливи... Ето един опит да го напишем по някак общ начин:той работи със standard_conforming_strings както ON, така и OFF, използва заместване от страна на сървъра на [%_], алтернативен знак за цитат, цитиране на знака за цитат и избягва sql инжекция:
db.Query("SELECT * from USERS where name like replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
variable_user_input);