Het gebruik van een backslash om aan enkele aanhalingstekens te ontsnappen is een veelgebruikte techniek om ervoor te zorgen dat de enkele aanhalingstekens de verwerking van de volledige tekenreeks door MySQL niet hindert.
Enkele aanhalingstekens worden gebruikt om een tekenreeks te omringen, dus een enkel aanhalingsteken binnen de tekenreeks zelf kan grote schade aanrichten als er niet correct wordt ontsnapt. Door eenvoudig een backslash direct voor het aanhalingsteken in te voegen, zorgt u ervoor dat MySQL de tekenreeks niet voortijdig beëindigt.
Het kan echter voorkomen dat u wilt dat de backslash blijft staan. U bent bijvoorbeeld van plan om de tekenreeks in een SQL-instructie te gebruiken en daarom wilt u dat deze eerst correct wordt geëscaped.
Dit is waar de QUOTE()
functie komt binnen.
De MySQL QUOTE()
functie citeert een tekenreeks om een resultaat te produceren dat kan worden gebruikt als een correct ontsnapte gegevenswaarde in een SQL-instructie. De tekenreeks wordt geretourneerd tussen enkele aanhalingstekens en met elke backslash (\
.) ), enkel aanhalingsteken ('
), ASCII NUL
, en Control+Z voorafgegaan door een backslash.
Syntaxis van de QUOTE()-functie
Zo werkt de syntaxis:
QUOTE(str)
Waar str
is de (reeds) ontsnapte tekenreeks.
Voorbeeld
Een voorbeeld legt dit waarschijnlijk beter uit dan mijn uitleg:
SELECT QUOTE('Don\'t!') AS Result;
Resultaat:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Op het eerste gezicht denk je misschien "maar er is niets gebeurd - het resultaat is precies hetzelfde als het argument". Dat is echter precies waarom deze functie handig is. Als we de QUOTE()
. niet hadden gebruikt functie, dit is wat er zou zijn gebeurd:
SELECT 'Don\'t!' AS Result;
Resultaat:
+--------+ | Result | +--------+ | Don't! | +--------+
Dus door de QUOTE()
. te gebruiken functie behouden we de enkele aanhalingstekens en de backslash.
In veel gevallen is dit natuurlijk precies wat u wilt. In veel gevallen moeten de backslash en de omringende aanhalingstekens moeten verwijderd worden. Maar er kunnen gevallen zijn waarin u precies wilt wat de QUOTE()
functie voor u doet.
Het alternatief
De QUOTE()
functie voorkomt dat u zoiets als dit hoeft te doen:
SELECT '''Don\\\'t!''' AS Result;
Resultaat:
+-----------+ | Result | +-----------+ | 'Don\'t!' | +-----------+
Zo hoeven we niet drie enkele aanhalingstekens te gebruiken voor elk afzonderlijk aanhalingsteken en drie backslashes voor elke backslash.