Il y a eu apparemment mais il y a quelques années, résolu depuis je crois (à vérifier) un soucis au niveau des charsets un peu spéciaux (chinous etc), enfin j'ai jamais vraiment compris pourquoi le truc posait problème mais comme dit c'était il y a un moment donc surement résolu depuis.
Sinon oui il y a un moyen, tout con mais pas mal n'y pensent pas: les nombres.
On vérifie super bien tout les champs textes, mais on oublie les nombres -> et voilà comment réaliser une belle injection SQL.
Pourquoi parce qu'un nombre n'a pas besoin de guillemet, ce qui laisse donc le privilége au pirate de rajouter ce qu'il veut derrière, et si l'injection ne posséde pas de guillemet ce qui est tout à fait possible, ton mysql_real_escape_string ne servira strictement à rien.
La solution ? Soit tu mets des guilemets partout, et encore pas sur soit tu vérifies que le nombre que tu attends... est bien un nombre.
Exemple tout con:
SELECT * FROM news WHERE ID = 1
un coup de mysql_real etc sur le 1, sauf que le pirate va entrer ceci:
?ID=1 UNION SELECT * FROM members etc etc
-> l'injection passera.
Tout ça pour en venir à LA régle: ne JAMAIS faire confiance aux données provenant de l'utilisateur.