Signatur
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
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;
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);
}
// 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.