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?
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.
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
.
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 quemysql_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.
maintenant ces deux fonctions sont déconseillées dans
PHP 4> = 4.3.0 et PHP 5. Ils recommandent d'utiliser
PDO_MySQL
extension