Mysql
 sql >> Database >  >> RDS >> Mysql

Cosa significa sfuggire a una stringa?

Escludere una stringa significa ridurre l'ambiguità tra virgolette (e altri caratteri) utilizzati in quella stringa. Ad esempio, quando definisci una stringa, in genere la racchiudi tra virgolette doppie o virgolette singole:

"Hello World."

Ma cosa succede se la mia stringa contiene virgolette doppie?

"Hello "World.""

Ora ho un'ambiguità:l'interprete non sa dove finisce la mia stringa. Se voglio mantenere le mie virgolette doppie, ho un paio di opzioni. Potrei usare virgolette singole attorno alla mia stringa:

'Hello "World."'

Oppure posso sfuggire alle mie citazioni:

"Hello \"World.\""

Qualsiasi citazione preceduta da una barra viene espansa e inteso come parte del valore della stringa.

Quando si tratta di query, MySQL ha alcune parole chiave che controlla che non possiamo utilizzare nelle nostre query senza creare confusione. Supponiamo di avere una tabella di valori in cui una colonna è stata denominata "Seleziona" e di voler selezionare quella:

SELECT select FROM myTable

Ora abbiamo introdotto alcune ambiguità nella nostra query. All'interno della nostra query, possiamo ridurre tale ambiguità utilizzando i backtick:

SELECT `select` FROM myTable

Questo rimuove la confusione che abbiamo introdotto usando scarso giudizio nella selezione dei nomi dei campi.

Molto di questo può essere gestito per te semplicemente passando i tuoi valori attraverso mysql_real_escape_string() . Nell'esempio seguente puoi vedere che stiamo passando i dati inviati dall'utente attraverso questa funzione per assicurarci che non causino problemi per la nostra query:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Esistono altri metodi per l'escape delle stringhe, come add_slashes , addcslashes , quotemeta e altro, anche se scoprirai che quando l'obiettivo è eseguire una query sicura, in generale gli sviluppatori preferiscono mysql_real_escape_string o pg_escape_string (nel contesto di PostgreSQL.