Използвайте различни доларови кавички вместо това:
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$ )
Всеки край трябва да съответства на всяко начало. Не е необходимо двете двойки да се различават, но така е най-безопасно.
Това все още оставя теоретичен шанс котировката за долар да бъде съпоставена вътре в низа.
Ако създавате заявката на ръка, просто проверете за $
в низа. Ако изграждате заявката от променливи, можете да използвате quote_literal(querystring)
вместо това.
Има и удобния format()
функция.
Вижте:
Настрана:предполагам, че сте наясно, че тази форма на динамичен SQL е изключително уязвима за SQL инжектиране? Всичко от този вид трябва да е само за много лична или много сигурна употреба.