Question

Je me demandais si cela fait une différence si je mysql_real_escape des données plus d'une fois?

Donc, si je me suis évadé données dans une partie de mon site, puis à nouveau dans une autre partie du code. Serait-ce un problème? Ou faire une différence?

Était-ce utile?

La solution

Oui. Vous obtiendrez antislashs supplémentaires inutiles.

Autres conseils

Le bon endroit pour mysql_real_escape est juste avant vous envoyez la requête pour enregistrer les données. Tous les autres cas partout ailleurs dans le script est un défaut de conception majeur.

Cela devrait de préférence dans un propre db classe bien sûr.

Oui, ce serait un problème.

Par exemple:
si a est "Maison Joe", le premier appel produire "Joe \ 's House" et le second produira "Joe \\\' s House", sauver la barre oblique inverse dans la base de données.

Ceci est similaire au problème qui se pose lorsque le serveur Web a les guillemets magiques ont permis et que vous utilisez mysql_real_escape_string sur l'entrée du client. Ceci est résolu par:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(Pour ce dernier exemple, voir http://www.php.net/get_magic_quotes_gpc )

[Je modifié la réponse à tenir compte des corrections dans les commentaires ci-dessous]

Bien sûr, les données serait double échappé.

Vous ne devriez pas utiliser mysql_real_escape() du tout, requêtes paramétrées par mysqli ont été coller assez longtemps.

Oui, ce sera un problème suréchappées. C'est la même pour tout Escaping, peu importe ce qu'il fait exactement. Par exemple, si vous souhaitez échapper des guillemets doubles dans la chaîne suivante règle commune:

bla "foo"

après un Escaping devient

bla \"foo\"

après deux devient

bla \\\"foo\\\"

et ainsi de suite. Nombre de « unescapements » doit correspondre exactement à nombre de « échappements ». Vous pouvez voir les manifestations de ce problème sur certains sites que trop échapper à certains caractères dans les champs de texte, de sorte que simple, devient \' sur apostrophe sortie.

Il est impossible de faire la distinction entre un échappé et une chaîne déprotégés parce que la chose qui ressemble à une chaîne échappée était la chaîne destinée non échappée. Par conséquent, en essayant d'échapper à nouveau, échapperait à la fuite -. Et échappé-fois le texte sera ce lit MySQL

, vous ne devriez jamais échapper donc plus d'une fois.

Cependant, une meilleure solution est d'utiliser des requêtes paramterized, puisque vous n'avez pas besoin d'échapper à tout.

Oui, cela fait une différence:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top