web-dev-qa-db-fra.com

mysql_escape_string VS mysql_real_escape_string

Donc, c'est quelque chose que nous devrions tous savoir et que j'ai joué dans mon esprit la première fois que je l'ai vu.

Je le sais mysql_escape_string est obsolète par rapport à 5.3, mais quelle était la différence réelle entre mysql_real_escape_string.

Ce que je pensais était que mysql_real_escape_string est exactement le même que mysql_escape_string Excepté mysql_real_escape_string prend un deuxième argument pour la ressource mysql.

alors j'ai bien pensé qu'il devait y avoir une certaine différence dans la façon dont les chaînes sont traitées car il n'y aurait pas besoin de 2 fonctions.

Alors j'ai pensé que la différence était purement due aux encodages locaux et de caractères. ?

quelqu'un peut-il éclaircir cela pour moi?

53
RobertPitt

La différence est que mysql_escape_string traite simplement la chaîne comme des octets bruts et ajoute un échappement là où il le juge approprié.

mysql_real_escape_string, d'autre part, utilise les informations sur le jeu de caractères utilisé pour la connexion MySQL. Cela signifie que la chaîne est échappée lors du traitement correct des caractères multi-octets; c'est-à-dire qu'il n'insérera pas de caractères d'échappement au milieu d'un caractère. C'est pourquoi vous avez besoin d'une connexion pour mysql_real_escape_string; c'est nécessaire pour savoir comment la chaîne doit être traitée.

Cependant, au lieu de s'échapper, il est préférable d'utiliser des requêtes paramétrées à partir de la bibliothèque MySQLi; il y a déjà eu des bogues dans la routine d'échappement, et il est possible que certains réapparaissent. Le paramétrage de la requête est beaucoup, beaucoup plus difficile à gâcher, il est donc moins probable que vous puissiez être compromis par un bogue MySQL.

87
Michael Madsen

mysql_escape_string n'est pas déconseillé à partir de 5.3 mais, pour 4.3.0 et supérieur. Ainsi, tout utilisateur utilisant PHP version ci-dessus/ou 4.3.0 doit utiliser mysql_real_escape_string.

si vous utilisez php < 4.3.0, que de faire votre magic_quotes_gpc active de php.ini, bien qu'il soit recommandé de mettre à jour, mais si votre code a un problème, assurez-vous d'utiliser, magic_quotes_gpc et addslash plutôt que mysql_escape_string.

3
Rocky Sharma

Eh bien ... en quelque sorte, oui. Il prend en compte le jeu de caractères de la connexion MySQL.

http://php.net/mysql_escape_string

Cette fonction est identique à mysql_real_escape_string() sauf que mysql_real_escape_string() prend un gestionnaire de connexion et échappe la chaîne en fonction du jeu de caractères actuel. mysql_escape_string() ne prend pas d'argument de connexion et ne respecte pas le paramètre de jeu de caractères actuel.

3
deceze

maintenant ces deux fonctions sont déconseillées dans

PHP 4> = 4.3.0 et PHP 5. Ils recommandent d'utiliser PDO_MySQL extension

1
Jeff_Alieffson