La documentazione di MySQL dice che dovrebbe essere \'
. Tuttavia, sia scite che mysql mostrano che ''
funziona. L'ho visto e funziona. Cosa dovrei fare?
\'
è specifico per MySQL mentre ''
è conforme ANSI SQL se non sbaglio
La documentazione di MySQL dice che dovrebbe essere \'
. Tuttavia, sia scite che mysql mostrano che ''
funziona. L'ho visto e funziona. Cosa dovrei fare?
\'
è specifico per MySQL mentre ''
è conforme ANSI SQL se non sbaglio
Risposte:
La documentazione di MySQL che citi in realtà dice un po 'di più di quanto menzioni. Dice anche,
Un "
'
" all'interno di una stringa citata con "'
" può essere scritto come "''
".
(Inoltre, sei collegato alla versione MySQL 5.0 della Tabella 8.1. Sequenze speciali di escape dei caratteri e la versione corrente è 5.6 - ma l'attuale Tabella 8.1. Le sequenze speciali di escape dei caratteri sembrano piuttosto simili.)
Penso che la nota di Postgres sul backslash_quote (string)
parametro sia informativa:
Questo controlla se un segno di virgoletta può essere rappresentato
\'
in una stringa letterale. Il modo preferito e standard SQL per rappresentare un segno di virgolette è raddoppiandolo (''
), ma PostgreSQL ha anche accettato storicamente\'
. Tuttavia, l'uso di\'
crea rischi per la sicurezza ...
Ciò mi dice che l'uso di un carattere a virgoletta singola raddoppiato è una scelta complessiva a lungo termine migliore rispetto all'utilizzo di una barra rovesciata per sfuggire alla virgoletta singola.
Ora, se si desidera aggiungere all'equazione anche la scelta della lingua, la scelta del database SQL e le sue stranezze non standard e la scelta del framework di query, si potrebbe finire con una scelta diversa. Non fornisci molte informazioni sui tuoi vincoli.
SQL standard utilizza virgolette doppie; MySQL deve accettare che sia ragionevolmente conforme.
'He said, "Don''t!"'
'
" all'interno di una stringa citata con " '
" può essere scritto come " ''
" . Un " "
" all'interno di una stringa citata con " "
" può essere scritto come " ""
". Precede il carattere di citazione da un carattere di escape ("` `").
Quello che credo intendesse user2087510 era:
name = 'something'
name = name.replace("'", "\\'")
L'ho usato anche con successo.
Ecco un esempio:
SELECT * FROM pubs WHERE name LIKE "%John's%"
Usa solo virgolette doppie per racchiudere la citazione singola.
Se insisti nell'usare virgolette singole (e la necessità di sfuggire al personaggio):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
Sono tre i modi di cui sono a conoscenza. Il primo non è il più bello e il secondo è il modo comune nella maggior parte dei linguaggi di programmazione:
'I mustn''t sin!'
\
prima della virgoletta singola '
:'I mustn\'t sin!'
"I mustn't sin!"
\'
come viene utilizzata da così tanti linguaggi di programmazione, ma ''
è supportata da più dialetti SQL, quindi l'utilizzo dell'opzione 1 è migliore per la compatibilità. Sqlite, ad esempio, non funziona con le escape backslash.
Sostituisci la stringa
value = value.replace(/'/g, "\\'");
dove valore è la stringa che verrà archiviata nel database.
Ulteriore,
Pacchetto NPM per questo, puoi avere un'occhiata in esso
Penso che se hai qualche punto dati con l'apostrofo puoi aggiungere un apostrofo prima dell'apostrofo
per esempio. "Questo è l'alloggio di John"
Qui MYSQL assume due frasi "Questo è il posto di John"
Puoi mettere "Questo è il posto di John". Penso che dovrebbe funzionare in questo modo.
In PHP mi piace usare mysqli_real_escape_string () che sfugge a caratteri speciali in una stringa da utilizzare in un'istruzione SQL.
vedi https://www.php.net/manual/en/mysqli.real-escape-string.php
Forse fuori tema, ma forse sei venuto qui alla ricerca di un modo per disinfettare l'input di testo da un modulo HTML, in modo che quando un utente inserisce il carattere apostrofo, non si genera un errore quando si tenta di scrivere il testo in un SQL tabella basata su un DB. Ci sono un paio di modi per farlo, e potresti voler leggere anche l'iniezione SQL, ma una semplice opzione in PHP è usare la funzione htmlspecialchars () che convertirà tutti i tuoi apostrofi in '
cui è probabilmente quello che vuoi memorizzare Comunque.
''
o\'
è corretto?