Brug af en omvendt skråstreg for at undslippe enkelte anførselstegn er en almindeligt brugt teknik til at sikre, at de enkelte anførselstegn ikke forstyrrer MySQL's håndtering af hele strengen.
Enkelte anførselstegn bruges til at omgive en streng, så et enkelt anførselstegn i selve strengen kan forårsage kaos, hvis den ikke er korrekt escaped. Hvis du blot indsætter en omvendt skråstreg umiddelbart før anførselstegn, sikrer du, at MySQL ikke afslutter strengen for tidligt.
Der kan dog være tilfælde, hvor du ønsker, at skråstreg forbliver. Det kan for eksempel være, at du har til hensigt at bruge strengen i en SQL-sætning, og derfor vil du have den korrekt escaped først.
Det er her QUOTE()
funktion kommer ind.
MySQL QUOTE()
funktion citerer en streng for at producere et resultat, der kan bruges som en korrekt escaped dataværdi i en SQL-sætning. Strengen returneres omgivet af enkelte anførselstegn og med hver forekomst af omvendt skråstreg (\
), enkelt anførselstegn ('
), ASCII NUL
, og Control+Z efter en omvendt skråstreg.
Syntaks for funktionen QUOTE()
Sådan går syntaksen:
QUOTE(str)
Hvor str
er den (allerede) undslupne streng.
Eksempel
Et eksempel forklarer dette nok bedre end min forklaring:
SELECT QUOTE('Don\'t!') AS Result;
Resultat:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Ved første øjekast tænker du måske "men der skete ikke noget - resultatet er nøjagtigt det samme som argumentet". Men det er netop derfor, denne funktion er nyttig. Hvis vi ikke havde brugt QUOTE()
funktion, her er hvad der ville være sket:
SELECT 'Don\'t!' AS Result;
Resultat:
+--------+ | Result | +--------+ | Don't! | +--------+
Så ved at bruge QUOTE()
funktion, beholder vi de enkelte anførselstegn og skråstreg.
Det er selvfølgelig i mange tilfælde præcis det, du ønsker. I mange tilfælde bør skråstreg og omkringliggende citater blive fjernet. Men der kan være nogle tilfælde, hvor du ønsker præcis, hvad QUOTE()
funktion gør for dig.
Alternativet
QUOTE()
funktion sparer dig for at skulle gøre noget som dette:
SELECT '''Don\\\'t!''' AS Result;
Resultat:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Så det sparer os for at skulle bruge tre enkelte anførselstegn for hvert enkelt citat og tre omvendte skråstreg for hver enkelt skråstreg.