Start · Sprachen · PHP · Referenz · db2_escape_string

db2_escape_string

Funktion

Maskiert Sonderzeichen in einem String, um ihn sicher in DB2-SQL-Abfragen einzusetzen.

seit PHP 5.2.0 Kategorie: db

Signatur

db2_escape_string(string $string_literal): string

Beschreibung

db2_escape_string() maskiert bestimmte Sonderzeichen in einem String, sodass dieser sicher als Wert in einer DB2-SQL-Abfrage verwendet werden kann. Die Funktion fügt vor Zeichen wie einfachen Anführungszeichen ('), doppelten Anführungszeichen ("), Backslashes (\) und NULL-Bytes (\0) einen Backslash ein.

Die Funktion gehört zur IBM DB2-Erweiterung (ibm_db2) und ist das Pendant zu Funktionen wie mysqli_real_escape_string() oder pg_escape_string() für andere Datenbanksysteme. Sie dient als einfache Hilfsmethode zur Zeichenmaskierung für DB2-kompatible Datenbanken.

Hinweis zur Sicherheit: Obwohl db2_escape_string() eine grundlegende Absicherung bietet, wird die Verwendung von Prepared Statements über db2_prepare() und db2_execute() ausdrücklich empfohlen. Prepared Statements bieten einen deutlich robusteren Schutz gegen SQL-Injection, da Daten und SQL-Logik vollständig getrennt werden.

Die Funktion ist hilfreich, wenn dynamisch zusammengesetzte SQL-Strings unvermeidbar sind und eine schnelle Maskierung von Benutzereingaben benötigt wird, sollte aber nicht als alleinige Sicherheitsmaßnahme betrachtet werden.

Parameter

Name Typ Default Beschreibung
$string_literal Pflicht string Der zu maskierende Eingabe-String, der z. B. eine Benutzereingabe enthält, die in eine SQL-Abfrage eingebettet werden soll.

Rückgabewert

Typ
string
Beschreibung
Gibt den maskierten String zurück, in dem Sonderzeichen durch einen vorangestellten Backslash geschützt sind. Die Funktion gibt immer einen String zurück.

Beispiele

Einfache Maskierung einer Benutzereingabe

<?php
// Benutzereingabe mit potenziell gefährlichen Zeichen
$benutzereingabe = "O'Reilly \"Books\" & Co.";

// Maskierung mit db2_escape_string
$sicher = db2_escape_string($benutzereingabe);

echo $sicher;
// Ausgabe: O\'Reilly \"Books\" & Co.

// Verwendung in einer SQL-Abfrage (besser: Prepared Statements nutzen!)
$sql = "SELECT * FROM autoren WHERE name = '" . $sicher . "'";
echo $sql;
O\'Reilly \"Books\" & Co. SELECT * FROM autoren WHERE name = 'O\'Reilly \"Books\" & Co.'

Vergleich: db2_escape_string vs. Prepared Statement

<?php
// Verbindung zur DB2-Datenbank herstellen
$conn = db2_connect('DATENBANKNAME', 'benutzer', 'passwort');

if ($conn) {
    $name = "Müller's Werkstatt";

    // Variante 1: db2_escape_string (weniger sicher)
    $sicher = db2_escape_string($name);
    $sql = "SELECT * FROM kunden WHERE name = '" . $sicher . "'";
    $stmt1 = db2_exec($conn, $sql);

    // Variante 2: Prepared Statement (empfohlen!)
    $sql2 = 'SELECT * FROM kunden WHERE name = ?';
    $stmt2 = db2_prepare($conn, $sql2);
    db2_execute($stmt2, [$name]);

    echo "Beide Abfragen wurden erfolgreich vorbereitet.";
    db2_close($conn);
}
Beide Abfragen wurden erfolgreich vorbereitet.

// Wichtig · Fallstricke

Sicherheitswarnung: db2_escape_string() bietet keinen vollständigen Schutz gegen SQL-Injection. Die Funktion maskiert zwar häufige Sonderzeichen, berücksichtigt jedoch keine datenbankspezifischen Zeichenkodierungen oder alle möglichen Angriffsvektoren. Verwende bevorzugt Prepared Statements mit db2_prepare() und db2_execute().

Die Funktion erfordert die Installation und Aktivierung der ibm_db2-PHP-Erweiterung. Ohne diese Erweiterung steht db2_escape_string() nicht zur Verfügung.

Im Gegensatz zu mysqli_real_escape_string() benötigt db2_escape_string() keine aktive Datenbankverbindung als Parameter, da die Maskierung zeichensatzunabhängig erfolgt — was gleichzeitig ein Risiko bei der Verwendung unterschiedlicher Zeichenkodierungen darstellt.