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.