PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Mettez $$ dans une chaîne entre guillemets en dollars dans PostgreSQL

Utilisez différents dollar-quotes à la place :

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$
   )

Chaque fin doit correspondre à chaque début. Les deux paires n'ont pas besoin d'être distinctes, mais c'est plus sûr ainsi.

Cela laisse encore une chance théorique que la citation en dollars corresponde à l'intérieur de la chaîne.

Si vous construisez la requête à la main, vérifiez simplement $ dans la chaîne. Si vous construisez la requête à partir de variables, vous pouvez utiliser quote_literal(querystring) à la place.

Il y a aussi le pratique format() fonction.

Voir :

A part :Je suppose que vous savez que cette forme de SQL dynamique est extrêmement vulnérable à l'injection SQL ? Tout élément de ce genre doit être réservé à un usage très privé ou très sécurisé.