DOUBLAGE DES SIMPLE QUOTE ' POUR LES CHAMPS SQL

Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009 - 12 avril 2004 à 12:13
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009 - 13 avril 2004 à 19:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21858-doublage-des-simple-quote-pour-les-champs-sql

michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
13 avril 2004 à 19:40
Mais Nix à tout à fait raison. J'ai fait cette fonction quand j'ai débuté, il n'y à d'ailleur pas très ongtemps. Et je n'ai pas réfléchi par la suite. Stupide de ma part.
jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009
13 avril 2004 à 14:40
Ok ok...
C'est vrai que je ne suis pas encore décidé à plonger dans le .Net...
Amitiés à Nix
jmluc
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
13 avril 2004 à 14:14
La source est indiquée comme .NET c'est pour ça que j'ai apporté mon commentaire en fonction de VB.NET
jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009
13 avril 2004 à 14:10
Désolé mais je vois pas ce qui_ est spécifique à .Net...dans la fonction de michelsto...
Quand à celle de Nix, effectivement return...c'est du .Net mais en vb6 on mettrait :
Public Function DoubleQuote(ByVal pValue As String) As String
DoubleQuote=Replace(pValue,"'","''")
End Function
Ca doit marcher comme ça.
JM
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
13 avril 2004 à 13:01
akami, la fonction tu l'as justement
exemple :
"SELECT * FROM MaTable WHERE MonChamp = '" & DoubleQuote(mavaleuradoublequoter) & "'"

Ca parait lourd mais c'est le seul moyen de ne pas se faire script injecter quand on fait une requete sql.

Le mieux pour eviter le script injection reste les procédures stockées avec SQL server, pas besoin de se soucier des quotes.

Tu peux essayer de faire un "analyseur" de requete sql pour parser et double quoter l'ensemble sans avoir à juste double quoter la valeur mais alors bon courrage parce que la moindre erreur dans ta fonction peut être une catastrophe. La meilleur solution reste celle-ci, avoir une fonction qui doublequote une valeur.
akami Messages postés 6 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 4 décembre 2006
13 avril 2004 à 12:53
C'est vrai la fonction REPLACE est la meilleur.
je felicite encore michelsto pour son humilité à l'egard de Nix.

Mais Imaginez maintenant que vous n'ayez pas penser avant et que vous avez déjà ecrit environ 2000 requêtes dans votre application et que parcourir chaque requête pour placer la fonction REPLACE devient fastidieux. Alors il faut formater le texte de la requête avant de la passer à exécution.

Comment donc ecrire la fonction de formatage?
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
13 avril 2004 à 11:55
oui sauf que sa source est une source VB.NET pas vb attention ;)
jmlucienvb Messages postés 129 Date d'inscription mercredi 24 septembre 2003 Statut Membre Dernière intervention 12 février 2009
13 avril 2004 à 11:45
Si on est en VBA la méthode de michelsto est intéressante car Replace n'existe pas en VBA (au moins jusqu'à 2000)
michelsto Messages postés 27 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 12 avril 2009
12 avril 2004 à 17:47
Exact Nix. Je n'ai pas pris cela comme une critique, et j'ai même adapté chez moi. Merci pour l'info.
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
12 avril 2004 à 12:13
Salut,

En plus simple et plus rapide :

Public Function DoubleQuote(ByVal pValue As String) As String
return pValue.Replace("'","''")
End Function

Il ne faut pas oublier que le framework est rempli de fonction comme celle-ci et surtout très optimisées.
C'est pas une critique, juste un façon plus simple de le faire ;)
Rejoignez-nous