Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was bedeutet es, einen String zu maskieren?

Das Maskieren einer Zeichenfolge bedeutet, die Mehrdeutigkeit in Anführungszeichen (und anderen Zeichen) zu reduzieren, die in dieser Zeichenfolge verwendet werden. Wenn Sie beispielsweise einen String definieren, schließen Sie ihn normalerweise entweder in doppelte oder einfache Anführungszeichen ein:

"Hello World."

Aber was, wenn mein String doppelte Anführungszeichen enthält?

"Hello "World.""

Jetzt habe ich Unklarheit - der Interpreter weiß nicht, wo meine Zeichenfolge endet. Wenn ich meine doppelten Anführungszeichen behalten möchte, habe ich ein paar Möglichkeiten. Ich könnte einfache Anführungszeichen um meine Zeichenfolge verwenden:

'Hello "World."'

Oder ich kann meine Anführungszeichen maskieren:

"Hello \"World.\""

Jedes Anführungszeichen, dem ein Schrägstrich vorangestellt ist, wird escaped , und als Teil des Wertes der Zeichenfolge verstanden werden.

Wenn es um Abfragen geht, hat MySQL bestimmte Schlüsselwörter, auf die es achtet, die wir in unseren Abfragen nicht verwenden können, ohne Verwirrung zu stiften. Angenommen, wir hätten eine Wertetabelle, in der eine Spalte "Auswählen" heißt, und wir wollten das auswählen:

SELECT select FROM myTable

Wir haben jetzt einige Mehrdeutigkeiten in unsere Abfrage eingeführt. Innerhalb unserer Abfrage können wir diese Mehrdeutigkeit reduzieren, indem wir Backticks verwenden:

SELECT `select` FROM myTable

Dies beseitigt die Verwirrung, die wir durch schlechtes Urteilsvermögen bei der Auswahl von Feldnamen verursacht haben.

Vieles davon kann für Sie erledigt werden, indem Sie Ihre Werte einfach durch mysql_real_escape_string() . Im folgenden Beispiel können Sie sehen, dass wir vom Benutzer übermittelte Daten über diese Funktion weiterleiten, um sicherzustellen, dass sie für unsere Abfrage keine Probleme verursachen:

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

Es gibt andere Methoden zum Maskieren von Zeichenfolgen, wie z. B. add_slashes , addcslashes , quotemeta , und mehr, obwohl Sie feststellen werden, dass Entwickler mysql_real_escape_string im Großen und Ganzen bevorzugen, wenn das Ziel darin besteht, eine sichere Abfrage auszuführen oder pg_escape_string (im Kontext von PostgreSQL.