Použijte různé dolarové uvozovky místo toho:
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ždý konec musí odpovídat každému začátku. Tyto dva páry nemusí být odlišné, ale je to tak nejbezpečnější.
To stále ponechává teoretickou šanci, že dolarová kotace může být shodná v řetězci.
Pokud vytváříte dotaz ručně, stačí zkontrolovat $
v řetězci. Pokud vytváříte dotaz z proměnných, můžete použít quote_literal(querystring)
místo toho.
K dispozici je také pohodlný format()
funkce.
Viz:
Stranou:Předpokládám, že víte, že tato forma dynamického SQL je extrémně zranitelná vůči SQL injection? Cokoli tohoto druhu by mělo být pouze pro velmi soukromé nebo velmi bezpečné použití.