Använd olika dollarcitat a> istället:
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$ )
Varje slut måste matcha varje start. De två paren behöver inte vara åtskilda, men det är säkrast så.
Detta lämnar fortfarande en teoretisk chans att dollarkursen kan matchas inuti strängen.
Om du bygger frågan för hand, kolla bara efter $
i strängen. Om du bygger frågan från variabler kan du använda quote_literal(querystring)
istället.
Det finns också det praktiska format()
funktion.
Se:
Bortsett från:Jag antar att du är medveten om att denna form av dynamisk SQL är extremt sårbar för SQL-injektion? Allt sådant bör endast vara för mycket privat eller mycket säker användning.