Erreur lors du remplacement de mots contenant des guillemets dans mySQL
-
05-07-2019 - |
Question
J'ai déjà mis à jour de nombreux enregistrements, mais un mot contenant une citation me donne l'erreur suivante: "ERREUR: citation non fermée @ 1357"
Je sais pourquoi cela me donne cette erreur, je ne sais tout simplement pas comment la résoudre.
Voici un exemple:
UPDATE invnum SET cAccountName
= remplacer ( cAccountName
, 'JOHN'S', 'BEN')
Merci d'avance.
La solution
Les guillemets d'échappement à l'intérieur des chaînes:
UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')
Vous voulez être très prudent avec ceci - ne pas le gérer correctement est la source de SQL attaques par injection et constitue une source majeure de problèmes de sécurité.
Autres conseils
si vous utilisez un script pour mettre à jour vos enregistrements, utilisez une fonction d'échappement intégrée. pour php, ce serait mysql_real_escape_string
Essayez plutôt ceci:
UPDATE invnum SET cAccountName = replace(cAccountName,"JOHN'S","BEN")
Si vous devez utiliser les deux types de guillemets dans une chaîne, vous devez échapper au type de guillemets que vous utilisez pour entourer la chaîne lorsqu'ils surviennent (sinon, l'interpréteur SQL pensera que la chaîne se termine avant elle. fait réellement.
Par exemple:
Johns becomes "Johns"
John's becomes "John's" or 'John\'s'
"John" becomes '"John"' or "\"John\""
et cetera.