Maison >développement back-end >Golang >Comment échapper aux caractères spéciaux pour une correspondance de modèle précise dans PostgreSQL ?

Comment échapper aux caractères spéciaux pour une correspondance de modèle précise dans PostgreSQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 04:30:02427parcourir

How to Escape Special Characters for Accurate Pattern Matching in PostgreSQL?

Échapper des chaînes pour la correspondance de modèles dans PostgreSQL

Pour faire correspondre avec précision les modèles dans PostgreSQL où la chaîne fournie par l'utilisateur peut contenir des caractères de modèle spéciaux comme % , pensez à échapper ces caractères pour garantir des correspondances précises. Alternativement, l'application peut gérer le processus d'échappement.

Dans PostgreSQL, les caractères comme % et _ doivent être cités à l'aide du , mais cela peut être personnalisé avec la clause ESCAPE. Pour faire correspondre le caractère littéralement, il doit être cité deux fois.

Par exemple, pour faire correspondre le modèle 'john%node1^node2.uucp@' avec ^ comme caractère d'échappement, utilisez la requête suivante :

... WHERE field LIKE 'john^%node1^^node2.uucp@%' ESCAPE '^'

Cependant, lorsque standard_conforming_strings est désactivé (PG 9.1 l'a activé par défaut), il est utilisé à d'autres fins. De plus, les guillemets côté client peuvent être nécessaires dans les scénarios d'injection.

Pour une gestion générique dans Go, en tenant compte à la fois des chaînes_conforming_standard et des caractères de guillemets alternatifs, la requête suivante peut être utilisée :

db.Query("SELECT * from USERS where name like replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'",
     variable_user_input);

Ceci gère l'échappement et le remplacement des caractères spéciaux côté serveur, empêchant l'injection SQL et garantissant une correspondance de modèle précise.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn