PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да избягате от низ, докато съвпадате с шаблон в PostgreSQL

Знаците _ и % трябва да бъдат цитирани, за да се съпоставят буквално в израз 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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверите дали PostgreSQL масивът съдържа стойност

  2. Сравняване на опциите за облачна база данни за PostgreSQL

  3. Как да изтриете дублиращи се редове без уникален идентификатор

  4. Postgres ограничение за уникален диапазон от дата и час

  5. Пропускане на двойните кавички за извършване на заявка в PostgreSQL