Frage

Ich frage mich, ob es einen Unterschied macht, wenn ich Daten mehr mysql_real_escape als einmal?

Also, wenn ich entkam Daten in einem Teil meiner Website, und dann wieder in einem anderen Teil des Codes. Wäre das ein Problem sein? Oder einen Unterschied machen?

War es hilfreich?

Lösung

Ja. Sie würden zusätzliche unnötige Schrägstriche bekommen.

Andere Tipps

Der richtige Ort für mysql_real_escape ist Recht vor Bitte senden Sie die Abfrage, um die Daten zu speichern. Jede andere Instanz anderswo im Skript ist ein wichtiger Konstruktionsfehler.

Das sollte vorzugsweise in einer eigenen db-Klasse natürlich.

Ja, es wäre ein Problem sein.

Zum Beispiel:
wenn a ist "Joe House", wird der erste Anruf erzeugen "Joe \ 's House" und die zweite wird produzieren "Joe \\\' s House", den umgekehrten Schrägstrich in der Datenbank zu speichern.

Dies ist vergleichbar mit dem Problem, das entsteht, wenn der Web-Server die Magic Quotes aktiviert ist und Sie mysql_real_escape_string auf einer Eingabe von dem Client. Dies wird gelöst durch:

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

(Für letztere Beispiel finden Sie unter http://www.php.net/get_magic_quotes_gpc )

[bearbeitete ich die Antwort Korrekturen in den Kommentaren unten zu reflektieren]

Natürlich würden Daten doppelt entkommen sein.

Sie sollten nicht mysql_real_escape() überhaupt verwenden, parametrisierte Abfragen über Mysqli haben schon lange genug kleben.

Ja, es wird ein über Hemmung Problem sein. Dies ist das gleiche für jede Entkommen, unabhängig davon, was genau es tut. Zum Beispiel, wenn Sie doppelte Anführungszeichen in Zeichenfolge folgende allgemeine Regel entkommen würde:

bla "foo"

nach einem Entkommen wird

bla \"foo\"

nach zwei wird

bla \\\"foo\\\"

und so weiter. Anzahl der „unescapements“ müssen genau übereinstimmen Anzahl von „Hemmungen“. Sie könnten Manifestationen dieses Problem auf einigen Seiten sehen, dass einige Zeichen in Textfeldern über entkommen, so dass eine einfache Apostroph \' auf Ausgang wird.

Es ist nicht möglich, zwischen einem entflohenen und einer unescaped Zeichenfolge zu unterscheiden, weil das Ding, das aussieht wie eine Escape-Sequenzen war die unescaped Zeichenfolge bestimmt. Daher noch einmal zu entkommen versuchen, würde die Flucht entkommen -. Und das entwichene einmal Text wird sein, was MySQL liest

Daher sollten Sie nie mehr entkommen als einmal.

Allerdings ist eine bessere Lösung ist paramterized Abfragen zu verwenden, da dann tun Sie nicht brauchen, zu entkommen.

Ja, es macht einen Unterschied:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top