mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)

mysql_real_escape_string Maskiert spezielle Zeichen innerhalb einer Zeichenkette für die Verwendung in einer SQL-Anweisung

Warnung

Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. Verwenden Sie stattdessen die Erweiterungen MySQLi oder PDO_MySQL. Weitere Informationen finden Sie im Ratgeber MySQL: Auswahl einer API. Alternativen zu dieser Funktion umfassen:

Beschreibung

mysql_real_escape_string(string $unescaped_string, resource $link_identifier = NULL): string

Maskiert spezielle Zeichen in unescaped_string unter Berücksichtigung des aktuellen Zeichensatzes der Verbindung, so dass das Ergebnis ohne Probleme in mysql_query() verwendet werden kann. Wenn Sie Binärdaten einfügen wollen, müssen Sie die Funktion auf jeden Fall verwenden.

mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a.

Die Funktion muss (mit wenigen Ausnahmen) immer verwendet werden, um Daten abzusichern, bevor sie per Abrage an MySQL übermittelt werden.

Achtung

Sicherheit: Der Standardzeichensatz

Der Zeichensatz muss entweder auf Ebene des Servers oder mittels der API-Funktion mysql_set_charset() gesetzt werden, damit dieser mysql_real_escape_string() beeinflusst. Siehe das Grundlagenkapitel zum Thema Zeichensätze für mehr Informationen.

Parameter-Liste

unescaped_string

Die zu maskierende Zeichenkette.

Verbindungs-Kennung

Die MySQL-Verbindung. Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen. Falls keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen, wie es beim Aufruf von mysql_connect() ohne Angabe von Argumenten der Fall wäre. Falls zufällig keine Verbindung gefunden oder aufgebaut werden kann, wird eine Warnung der Stufe E_WARNING erzeugt.

Rückgabewerte

Gibt eine maskierte Zeichenkette zurück oder im Fehlerfall false.

Fehler/Exceptions

Wird diese Funktion ohne MySQL-Verbindung ausgeführt, werden ebenfalls PHP-Fehler der Stufe E_WARNUNG ausgelöst. Diese Funktion sollte nur mit einer gültigen MySQL-Verbindung verwendet werden.

Beispiele

Beispiel #1 Einfaches mysql_real_escape_string()-Beispiel

<?php
// Verbindung herstellen
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

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

Beispiel #2 mysql_real_escape_string() benötigt eine Verbindung

Diese Beispiel verdeutlicht, was geschieht, wenn beim Aufruf dieser Funktion keine MySQL-Verbindung vorhanden ist.

<?php
// Wir sind nicht mit MySQL verbunden

$lastname  "O'Reilly";
$_lastname mysql_real_escape_string($lastname);

$query "SELECT * FROM actors WHERE last_name = '$_lastname'";

var_dump($_lastname);
var_dump($query);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

Warning: mysql_real_escape_string(): No such file or directory in /this/test/script.php on line 5
Warning: mysql_real_escape_string(): A link to the server could not be established in /this/test/script.php on line 5

bool(false)
string(41) "SELECT * FROM actors WHERE last_name = ''"

Beispiel #3 Ein beispielhafter SQL-Injection-Angriff

<?php
// Wir haben $_POST['password'] nicht überprüft, es könnte
// jeder beliebiger Wert sein, den der Benutzer will!
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// Datenbankabfrage zur Ueberpruefung der Logindaten
$query "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// Das bedeutet, der an MySQL gesendete Query wuerde sein:
echo $query;
?>

Die Abfrage, die an MySQL übermittelt wird:

SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

Dies würde jedem erlauben, sich ohne valides Passwort einzuloggen.

Anmerkungen

Hinweis:

Sie müssen eine Verbindung zu MySQL geöffnet haben, bevor Sie mysql_real_escape_string() verwenden, ansonsten erhalten Sie einen Fehler vom Typ E_WARNING und der Rückgabewert wird zu false. Ist link_identifier nicht angegeben, wird die letzte MySQL-Verbindung verwendet.

Hinweis:

Ist magic_quotes_gpc aktiviert, wenden Sie zuerst stripslashes() auf die Daten an. Das Bearbeiten bereits in irgend einer Form maskierter Daten durch mysql_real_escape_string führt ansonsten dazu, dass bereits Maskiertes doppelt maskiert wird.

Hinweis:

Wenn die Funktion nicht verwendet wird, um die Daten zu maskieren, ist die Abfrage anfällig für SQL-Injection-Angriffe.

Hinweis: mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Was genau bedeutet "Vibe Coding"? Ein tiefgehender Blick für Entwickler

In der Welt der Softwareentwicklung gibt es unzählige Wege, wie man an ein Projekt herangeht. Manche schwören auf strikte Planung, andere auf bewährte Algorithmen und wieder andere lassen sich von etwas ganz anderem leiten: ihrem Gefühl. ...

admin

Autor : admin
Kategorie: Software & Web-Development

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Helfen! Doppelte Bestelleinträge in meiner Verkaufstabelle

I am struggling to start learning about code. I have a background in economics Bendomenech68, ich betreibe Online-Handel seit 2010, und selbst da ...

Geschrieben von MannesHaar am 03.04.2025 16:21:46
Forum: SQL / Datenbanken
Bilder in Bildern platzieren

Ja, und damit wäre deine Frage korrekt beantwortet. Und wenn du mal einen Blick in die Doku werfen würdest, wüsstest du das auch. Siehe https:/ ...

Geschrieben von emilyjohnson637 am 03.04.2025 13:26:35
Forum: PHP Developer Forum
Abfrage in Datenbank

Primärschlüssel und Fremdschlüssel: Stelle sicher, dass du in der Tabelle "hofmanagement" eine Spalte für den Fremdschlüssel hast escape roa ...

Geschrieben von nancy266 am 03.04.2025 13:14:40
Forum: SQL / Datenbanken
Berechnungen durchführen

Um sicherzustellen, dass nur Dezimalzahlen mit bis zu 3 Nachkommastellen eingegeben werden, kannst du serverseitige Validierung in der berechnung. ...

Geschrieben von jennikim266 am 03.04.2025 12:13:24
Forum: PHP Developer Forum