Heim >Backend-Entwicklung >PHP-Tutorial >Warum maskiert „addcslashes' Unterstriche in MySQL unterschiedlich?

Warum maskiert „addcslashes' Unterstriche in MySQL unterschiedlich?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 15:24:021089Durchsuche

Why Does `addcslashes` Escape Underscores Differently in MySQL?

MySQL-Wildcards entkommen: Das Unterstrich-Rätsel lösen

In MySQL sind Platzhalter und Sonderzeichen wie Unterstriche (_) und Prozentzeichen (%) ) kann zu Escape-Herausforderungen führen, wenn Benutzereingaben an die Datenbank gesendet werden. Die PHP-Funktion mysql_real_escape_string behandelt die meisten Escape-Anforderungen, erstreckt sich jedoch nicht auf _ und %. Aus diesem Grund greifen einige möglicherweise auf die Verwendung von addcslashes zurück, um diese Zeichen weiter zu maskieren.

Es entsteht jedoch ein verwirrendes Problem: Wenn eine Benutzereingabe einen Unterstrich enthält, führt die Ausführung über addcslashes nicht zu einem maskierten Unterstrich, wenn die Eingabe vorhanden ist aus der Datenbank abgerufen. Wenn beispielsweise „test_test“ gesendet und dann abgerufen wird, zeigt das Ergebnis „test_test“ „mit einem maskierten Unterstrich. Die Frage ist, warum der Unterstrich anders maskiert wird als andere Zeichen, die mit derselben Methode maskiert werden?

Die Antwort liegt in der Tatsache, dass _ und % im allgemeinen MySQL-Verbrauch keine Platzhalter sind. Sie werden nur dann zu etwas Besonderem, wenn sie in LIKE-Anweisungen verwendet werden, wo sie mit Escapezeichen versehen werden müssen, um ihren wörtlichen Formen zu entsprechen Um Escape-Zeichen für die Verwendung in LIKE-Anweisungen zu verwenden, muss ein verschachtelter Escape-Prozess verwendet werden.

Zuerst muss die Zeichenfolge innerhalb der SQL-Abfrage mit LIKE-Escapezeichen versehen werden. In diesem Zusammenhang sind _ und % speziell und müssen explizit maskiert werden , zusammen mit dem Escape-Zeichen selbst. Dieser Schritt sollte auch bei Verwendung parametrisierter Abfragen durchgeführt werden.

Sobald das LIKE-Escape abgeschlossen ist, muss die Zeichenfolge erneut mit Escapezeichen versehen werden, damit sie außerhalb der regulären Zeichenfolge verwendet werden kann von SQL. Hier kommt mysql_real_escape_string ins Spiel.

Die Verwirrung entsteht, weil MySQL einen Backslash () als Escape-Zeichen für beide Escape-Phasen verwendet. Zur Veranschaulichung: Um eine genaue Übereinstimmung für ein Prozentzeichen in einer LIKE-Anweisung zu finden, müsste die Zeichenfolge mit einem doppelten Backslash-Escapezeichen versehen werden: „LIKE ‚something%‘“. Allerdings schreibt ANSI SQL vor, dass in String-Literalen Backslashes literale Backslashes darstellen und Anführungszeichen (') anstelle von Backslashes maskiert werden sollten.

Um plattformspezifische Probleme zu vermeiden, wird empfohlen, das Standard-Escape-Verhalten in LIKE zu überschreiben Anweisungen und definieren Sie ein benutzerdefiniertes Escape-Zeichen mit dem Konstrukt LIKE ... ESCAPE ....

Das obige ist der detaillierte Inhalt vonWarum maskiert „addcslashes' Unterstriche in MySQL unterschiedlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn