Errore durante la sostituzione di parole che contengono virgolette in mySQL
-
05-07-2019 - |
Domanda
Ho già aggiornato molti record, ma quando è arrivata a una parola che contiene un preventivo ottengo questo errore: " ERRORE: citazione non chiusa @ 1357 "
So perché mi sta dando questo errore, semplicemente non so come risolverlo.
Ecco un esempio:
AGGIORNA invnum SET cAccountName
= sostituisci ( cAccountName
, 'JOHN'S', 'BEN')
Grazie in anticipo.
Soluzione
Escape citazioni all'interno di stringhe:
UPDATE invnum SET cAccountName = replace(cAccountName,'JOHN\'S','BEN')
Vuoi stare molto attento a questo - non affrontarlo correttamente è la fonte di SQL attacchi di iniezione ed è una delle principali fonti di problemi di sicurezza.
Altri suggerimenti
se stai utilizzando uno script per aggiornare i tuoi record, utilizza una funzione di escape incorporata. per php che sarebbe mysql_real_escape_string
Prova invece:
UPDATE invnum SET cAccountName = replace(cAccountName,"JOHN'S","BEN")
Se è necessario utilizzare entrambi i tipi di virgolette all'interno di una stringa, è necessario evitare il tipo di virgolette che si utilizza per circondare la stringa quando si verificano al suo interno (altrimenti l'interprete SQL penserà che la stringa termini prima di essa effettivamente.
Ad esempio:
Johns becomes "Johns"
John's becomes "John's" or 'John\'s'
"John" becomes '"John"' or "\"John\""
eccetera.