L'utilizzo di una barra rovesciata per sfuggire alle virgolette singole è una tecnica comunemente utilizzata per garantire che le virgolette singole non interferiscano con la gestione dell'intera stringa da parte di MySQL.
Le virgolette singole vengono utilizzate per circondare una stringa, quindi una virgoletta singola all'interno della stringa stessa potrebbe causare il caos se non viene adeguatamente evitata. Il semplice inserimento di una barra rovesciata immediatamente prima delle virgolette assicura che MySQL non termini la stringa prematuramente.
Tuttavia, potrebbero esserci occasioni in cui desideri che la barra rovesciata rimanga. Ad esempio, potresti voler utilizzare la stringa in un'istruzione SQL e, pertanto, desideri che prima venga eseguito correttamente l'escape.
Qui è dove il QUOTE()
entra in funzione.
Il QUOTE()
di MySQL La funzione cita una stringa per produrre un risultato che può essere utilizzato come valore di dati correttamente sottoposto a escape in un'istruzione SQL. La stringa viene restituita racchiusa tra virgolette singole e con ogni istanza di barra rovesciata (\
), virgolette singole ('
), ASCII NUL
e Control+Z preceduto da una barra rovesciata.
Sintassi della funzione QUOTE()
Ecco come va la sintassi:
QUOTE(str)
Dove str
è la stringa (già) con escape.
Esempio
Un esempio probabilmente lo spiega meglio della mia spiegazione:
SELECT QUOTE('Don\'t!') AS Result;
Risultato:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
A prima vista, potresti pensare "ma non è successo niente:il risultato è esattamente lo stesso dell'argomento". Tuttavia, questo è esattamente il motivo per cui questa funzione è utile. Se non avessimo usato il QUOTE()
funzione, ecco cosa sarebbe successo:
SELECT 'Don\'t!' AS Result;
Risultato:
+--------+ | Result | +--------+ | Don't! | +--------+
Quindi, usando il QUOTE()
funzione, manteniamo le virgolette singole e la barra rovesciata.
Naturalmente, in molti casi, questo è esattamente quello che vuoi. In molti casi, la barra rovesciata e le virgolette circostanti dovrebbero essere rimosso. Ma potrebbero esserci alcuni casi in cui vuoi esattamente ciò che il QUOTE()
la funzione fa per te.
L'alternativa
Il QUOTE()
la funzione ti evita di dover fare qualcosa del genere:
SELECT '''Don\\\'t!''' AS Result;
Risultato:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Quindi ci evita di dover utilizzare tre virgolette singole per ogni singola citazione e tre barre inverse per ogni singola barra inversa.