PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Umieść $$ w ciągu znaków w cudzysłowie w PostgreSQL

Użyj różnych cytatów-dolarów zamiast tego:

select upsert(
   $unique_token$INSERT INTO zz(a, b) VALUES (66, 'ha$$hahaha')$unique_token$,
   $unique_token2$UPDATE zz SET a=66, b='hahahaha' WHERE a=66$unique_token2$
   )

Każdy koniec musi pasować do każdego początku. Te dwie pary nie muszą być różne, ale tak jest najbezpieczniej.

To wciąż pozostawia teoretyczną szansę, że cytat w dolarach może zostać dopasowany w ciągu.

Jeśli tworzysz zapytanie ręcznie, po prostu sprawdź $ w ciągu.Jeśli tworzysz zapytanie ze zmiennych, możesz użyć quote_literal(querystring) zamiast tego.

Istnieje również wygodny format() funkcja.

Zobacz:

Na bok:Zakładam, że zdajesz sobie sprawę, że ta forma dynamicznego SQL jest bardzo podatna na wstrzyknięcie SQL? Wszystko w tym rodzaju powinno być przeznaczone wyłącznie do bardzo prywatnego lub bardzo bezpiecznego użytku.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy powinienem dodać kolumnę typu do dziedziczenia projektu w postgreSQL?

  2. PostgreSQL tsrange:czy to prawda, że ​​lower_inf('(-infinity,today)'::tsrange) ma wartość false?

  3. Nie można utworzyć tabeli bazy danych o nazwie „użytkownik” w PostgreSQL

  4. Jak przepisać instrukcję SELECT ... CROSS JOIN LATERAL ... dla starszych wersji PostgreSQL?

  5. kodowanie UTF8 nie jest zgodne z lokalizacją en_US; wybrane ustawienie LC_CTYPE wymaga kodowania LATIN1