2011-01-19 2 views

risposta

6

addslashes è l'equivalente approssimativo di str_replace($str, "'", "\\'"). Puoi aggirarlo banalmente con un numero qualsiasi di sequenze Unicode che valutano fino a ' in mysql, ma sembrano completamente diverse da addslashes().

Mysql_real_escape_String() d'altra parte, utilizza l'effettiva funzione interna di escape di mysql, che sa esattamente cosa cercare e aggiusta per renderlo "sicuro" per mysql. Ciò che funziona per mysql potrebbe non funzionare per un altro database, poiché ognuno ha una semantica e requisiti di escape leggermente differenti, ma se si sta lavorando con mysql, la "vera stringa di escape" è la strada da percorrere.

+0

ma d'altra parte, non è possibile utilizzare le rimuovi pizze con mysql_real_escape_String, vero? Ho avuto un paio di volte in cui ho bisogno di rimuovere le barre da una voce del database – blake305

+1

Se le cose sono state salvate con l'escape, allora hai un bug logico da qualche parte. Ma no, rimuove molto probabilmente, ma non è garantito, annullare la "vera stringa di escape". Potrebbe funzionare in test semplici, ma molto probabilmente ti brucierà più tardi. –

0

Ed ancora è possibile se si aggiungono i dati non quotate a una tabella, vale a dire

SELECT * FROM tbl WHERE id = 10 

Qui si vuole fare in modo che questo ID è esattamente una cifra

$id = intval($_GET[ 'id' ]) ; 
$query = "SELECT * FROM tbl WHERE id = {$id}" ; 
$result = mysql_query($query) ; 
// ... bla-bla 
1

Questo è ciò che accade quando aggiungi solo barre in una lingua che comprende codifiche unicode (o configura le codifiche durante l'invio della query): http://bugs.mysql.com/bug.php?id=22243

Fondamentalmente è più sicuro sapere cosa t Il database si aspetta in termini di codifica - in questo modo non finirai per sfuggire a metà del personaggio per sbaglio, o lascerai la parte successiva di un personaggio senza caratteri di escape.