Brug forskellige dollar-citater a> i stedet:
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$ )
Hver ende skal matche hver start. De to par behøver ikke at være adskilte, men det er sikrest på den måde.
Dette efterlader stadig en teoretisk chance for, at dollar-citatet kan matches inde i strengen.
Hvis du bygger forespørgslen i hånden, skal du bare tjekke efter $
i strengen.Hvis du bygger forespørgslen ud fra variabler, kan du bruge quote_literal(querystring)
i stedet.
Der er også det praktiske format()
funktion.
Se:
Til side:Jeg går ud fra, at du er klar over, at denne form for dynamisk SQL er ekstremt sårbar over for SQL-injektion? Alt af den slags bør kun være til meget privat eller meget sikker brug.