2017-10-12 2 views
0

Je suis en train de mettre à jour une chaîne dans une table en utilisant une instruction SQL Firebird, avec des informations tapées par un utilisateur. Toutefois, si la chaîne entrée par un utilisateur a une apostrophe, cela crée une erreur car la syntaxe SQL ne lit plus correctement. Je suppose que je pourrais lire la chaîne et supprimer toutes les instances d'apostrophes, mais je me demande s'il y a un moyen plus facile.Comment réparer une erreur lorsque la valeur dans SQL contient une apostrophe

{Edition 17 mai 2017} J'utilise Firebird 2.5 (dans le cadre d'un programme logiciel appelé Ostendo)

Voici un extrait du code:

UpdatedMsg := frmPOLineNotesMemo.Lines.text; 
SQLUpdateStr := 'update ASSEMBLYLINES set LINENOTES = LINENOTES || '''+ UpdatedMsg +''' Where SYSUNIQUEID = ' + AssyPropertyLine + ''; 
ExecuteSQL(SQLUpdateStr); 

frmPOLineNotesMemo.Lines.Text est l'information entrée par l'utilisateur via un formulaire.

+0

S'il vous plaît nous montrer un [MCVE] (https://stackoverflow.com/help/mcve) qui illustre ce problème en raison de certaines entrées, et s'il vous plaît également la liste de la version de Firebird. Généralement, vous ne voulez pas supprimer les caractères "impairs" de l'entrée de l'utilisateur si possible - "King's Cross" a besoin de son apostrophe, après tout - mais vous ne voulez pas les encoder en toute sécurité. Il y a plusieurs façons de le faire en fonction de votre interface ou de vos liaisons avec Firebird. – pilcrow

+8

Utilisez SQL paramétré - c'est la manière correcte et facile. – ain

+4

Vous devriez vraiment montrer votre code. De votre description, votre code est vulnérable à l'injection SQL. Vous ne devriez jamais ** concaténer des valeurs dans une chaîne de requête, et ** toujours ** utiliser des paramètres. Les paramètres suppriment le risque d'injection SQL. –

Répondre

0

Vous devez doubler les apostrophes dans la chaîne. Trouvé ici: https://firebirdsql.org/manual/qsg10-firebird-sql.html

Cependant, gardez à l'esprit les commentaires. L'entrée de l'utilisateur doit être transmise en tant que paramètre pour éviter les problèmes de sécurité.