(reprise du message précédent)
Non il n'y a pas que ' et " de dangereux. \ permet par exemple d'échapper un ' ou " qui suit, donc si \ n'est pas échappé, le fait d'échapper ' et " ne protège absolument rien du tout. Le caractère Ctrl+Z également appelé \e ou \27, \1F ou Escape permet aussi parfois (plus rarement) de faires des échappements. Le caractère nul \0 est plus méconnu et permet quant à lui de stopper prématurément une chaîne lorsque des API en C sont utilisées. Pour rappel PHP est compilé en C et l'écrasante majorité de ses bibliothèques aussi, donc c'est un piège classique qui n'est pas seulement valable dans les bases de données.
Juste pour info, la fonction PDO::quote est encore mieux que mysql_real_escape_string, parce qu'en plus d'échapper correctement la chaîne, elle l'entoure automatiquement d'apostrophes. Du coup on peut l'utiliser indifféremment pour quasiment tout, chaînes, nombres, dates ou autres.
Attention aussi à échapper % et _ en plus si on utilise LIKE, ou les métacaractères dans le cas des regex; on l'oublie facilement et ceux-là ne sont pas couverts par les fonctions habituelles.
Non il n'y a pas que ' et " de dangereux. \ permet par exemple d'échapper un ' ou " qui suit, donc si \ n'est pas échappé, le fait d'échapper ' et " ne protège absolument rien du tout. Le caractère Ctrl+Z également appelé \e ou \27, \1F ou Escape permet aussi parfois (plus rarement) de faires des échappements. Le caractère nul \0 est plus méconnu et permet quant à lui de stopper prématurément une chaîne lorsque des API en C sont utilisées. Pour rappel PHP est compilé en C et l'écrasante majorité de ses bibliothèques aussi, donc c'est un piège classique qui n'est pas seulement valable dans les bases de données.
Juste pour info, la fonction PDO::quote est encore mieux que mysql_real_escape_string, parce qu'en plus d'échapper correctement la chaîne, elle l'entoure automatiquement d'apostrophes. Du coup on peut l'utiliser indifféremment pour quasiment tout, chaînes, nombres, dates ou autres.
Attention aussi à échapper % et _ en plus si on utilise LIKE, ou les métacaractères dans le cas des regex; on l'oublie facilement et ceux-là ne sont pas couverts par les fonctions habituelles.