Scappare una stringa significa ridurre l'ambiguità tra virgolette (e altri caratteri) utilizzati in quella stringa. Per esempio, quando si sta definendo una stringa, in genere lo circondano sia in virgolette doppie o singole:
"Hello World."
Ma cosa succede se la mia stringa aveva virgolette doppie all'interno di esso?
"Hello "World.""
Ora ho ambiguità: l'interprete non sa dove finisce la mia stringa. Se voglio mantenere le mie doppie virgolette, ho un paio di opzioni. Potrei usare le virgolette singole intorno al mio stringa:
'Hello "World."'
O posso scappare mie citazioni:
"Hello \"World.\""
Qualsiasi citazione che è preceduta da una barra è sfuggito, e inteso a far parte della valore della stringa.
Quando si tratta di query, MySQL ha determinate parole chiave che non possiamo usare nelle nostre query senza causare confusione. Supponiamo di avere una tabella di valori in cui una colonna è stato chiamato "Select", e abbiamo voluto selezionare che:
SELECT select FROM myTable
Ora abbiamo introdotto una certa ambiguità nella nostra query. All'interno della nostra interrogazione, possiamo ridurre l'ambiguità che utilizzando back-tick:
SELECT `select` FROM myTable
questo elimina la confusione abbiamo introdotto utilizzando scarsa capacità di giudizio nella scelta di nomi di campo.
Molto di questo può essere gestito per voi semplicemente passando i valori attraverso mysql_real_escape_string()
. Nell'esempio riportato di seguito si può vedere che stiamo passando i dati inviati dall'utente attraverso questa funzione per assicurarsi che non causerà alcun problema per la nostra query: esistono
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
Altri metodi per le stringhe in fuga, come ad esempio add_slashes
, addcslashes
, quotemeta
, e di più, anche se ci si accorge che, quando l'obiettivo è quello di eseguire una query di sicurezza, da e grandi sviluppatori preferiscono mysql_real_escape_string
o pg_escape_string
(nel contesto di PostgreSQL.
PS ho potuto avere appena chiesto un amico e non mi sono reso ridicolo ma ho pensato che ci sarebbe stato un sacco di gente, proprio come me, a chiedermi di che cosa stiano parlando tutti quelli che stanno parlando. – Brett