Cette fonction est identique à mysql_real_escape_string() à l'exception faite que mysql_real_escape_string() prends deux identifiants de connexion comme premiers arguments et échappe la chaîne en se basant que le jeu de caractères courant. mysql_escape_string() ne prends pas d'identifiant de connexion et ne respecte pas le jeu de caractères courant.
C'est expliqué clairement : la real a besoin d'une connexion au serveur, et fait une requete SQL à chaque fois que l'on appelle pour connaitre le jeu de caractère courant.
Cela peut-etre chiant, car je peux très bien avoir envie de déclarer mes variables PHP contenant des requetes SQL avant de faire une connexion à MySQL.
Or dans ce cas, je serais obligé de modifier mes $sql une fois la connexion à MySQL établie.
De plus, elle n'offre aucun système pour stocker le jeu de caractère courant quelque part, je trouve cela dommage, et c'est clairement inutilisable en production si tu n'as pas beaucoup de sous et un gros trafic (testé chez iFRANCE, et ben on est revenu à mysql_escape_string pour eviter de racheter des box pour MySQL. Ben ouais, avec une base de 10 Go qui se prend 500 select par seconde en moyenne, tu la sens la différence entre la real et la normale).
Sinon, oui, la real est forcemment plus efficace, car elle check tout en fonction de tes données en base.
Après c'est un choix à faire entre mettre à genou un mysql (comme vu precedemment, tout depend de ton trafic, pour un site perso on ne verra pas vraiment la différence) et un escape un peu moins efficace.
En meme temps, si tu utilises du 8859-1, a priori, les seuls trucs à escaper, ce sont les ', or mysql_escape_string le fait très bien.
Pis les gens de MySQL, ils m'enervent, voila