Erro ao substituir palavras que contenham citações no MySQL
-
05-07-2019 - |
Pergunta
Eu atualizei muitos registros já, mas quando se tratava de uma palavra que contém uma citação eu recebo este erro: "ERROR: Citação Unclosed @ 1357"
Eu sei porque ele está me dando esse erro, eu só não sei como resolvê-lo.
Aqui está um exemplo:
ATUALIZAÇÃO invnum SET cAccountName
= substituir (cAccountName
, 'JOHN'S', 'Ben')
Agradecemos antecipadamente.
Solução
Cotações de escape dentro de strings:
UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')
Você quer ter muito cuidado com isso - não lidar com isso corretamente é a fonte de SQL ataques de injeção , e é uma importante fonte de problemas de segurança.
Outras dicas
Se você estiver usando um script para atualizar seus registros usar um builtin escapar função. para php que seria mysql_real_escape_string
Tente isto em vez disso:
UPDATE invnum SET cAccountName = replace(cAccountName,"JOHN'S","BEN")
Se você precisa usar ambos os tipos de citações dentro de uma cadeia, então você precisa para escapar do tipo de citações que você usar para cercar a string quando elas ocorrem dentro dele (caso contrário o intérprete SQL vai pensar as extremidades da corda antes dele realmente faz.
Por exemplo:
Johns becomes "Johns"
John's becomes "John's" or 'John\'s'
"John" becomes '"John"' or "\"John\""
et cetera.