At undslippe en streng betyder at reducere tvetydigheden i anførselstegn (og andre tegn), der bruges i den streng. For eksempel, når du definerer en streng, omgiver du den typisk i enten dobbelte anførselstegn eller enkelte anførselstegn:
"Hello World."
Men hvad nu hvis min streng havde dobbelte anførselstegn?
"Hello "World.""
Nu har jeg uklarhed - tolken ved ikke, hvor min streng ender. Hvis jeg vil beholde mine dobbelte anførselstegn, har jeg et par muligheder. Jeg kunne bruge enkelte anførselstegn omkring min streng:
'Hello "World."'
Eller jeg kan undslippe mine citater:
"Hello \"World.\""
Ethvert citat, der indledes med en skråstreg, er escaped , og forstås som en del af værdien af strengen.
Når det kommer til forespørgsler, har MySQL visse søgeord, den holder øje med, som vi ikke kan bruge i vores forespørgsler uden at forårsage en vis forvirring. Antag, at vi havde en tabel med værdier, hvor en kolonne hed "Vælg", og vi ønskede at vælge det:
SELECT select FROM myTable
Vi har nu indført en vis tvetydighed i vores forespørgsel. Inden for vores forespørgsel kan vi reducere denne tvetydighed ved at bruge back-ticks:
SELECT `select` FROM myTable
Dette fjerner den forvirring, vi har indført ved at bruge dårlig dømmekraft ved valg af feltnavne.
Meget af dette kan håndteres for dig ved blot at sende dine værdier gennem mysql_real_escape_string()
. I eksemplet nedenfor kan du se, at vi sender brugerindsendte data gennem denne funktion for at sikre, at det ikke vil forårsage problemer for vores forespørgsel:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Der findes andre metoder til at undslippe strenge, såsom add_slashes
, addcslashes
, quotemeta
, og mere, selvom du vil opdage, at når målet er at køre en sikker forespørgsel, foretrækker udviklere i det store og hele mysql_real_escape_string
eller pg_escape_string
(i forbindelse med PostgreSQL.