Signatur
Beschreibung
db2_bind_param() verknüpft eine PHP-Variable mit einem Platzhalter-Parameter (?) in einer mit db2_prepare() vorbereiteten SQL-Anweisung. Die Bindung ermöglicht es, Eingabewerte sicher an Abfragen zu übergeben und bei Bedarf auch Ausgabe- und Eingabe/Ausgabe-Parameter für gespeicherte Prozeduren zu verwenden.
Im Gegensatz zu einfachen Inline-Werten schützt die Parameterbindung vor SQL-Injection-Angriffen, da der Datenbankserver Wert und SQL-Syntax strikt voneinander trennt. Die Variable wird per Referenz gebunden, d. h. ihr Wert zum Zeitpunkt von db2_execute() ist maßgeblich – nicht der Wert zum Zeitpunkt von db2_bind_param().
Für gespeicherte Prozeduren lassen sich mit den Konstanten DB2_PARAM_OUT und DB2_PARAM_INOUT auch Rückgabewerte aus der Prozedur entgegennehmen. Mit den optionalen Parametern data_type, precision und scale kann der Datentyp des Parameters präzise gesteuert werden, was besonders bei numerischen oder CLOB/BLOB-Typen relevant ist.
Die Funktion ist Teil der IBM DB2-, Cloudscape- und Apache Derby-Erweiterung (ibm_db2) und steht nur zur Verfügung, wenn diese Erweiterung installiert und aktiviert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Ein vorbereitetes Statement, das von db2_prepare() zurückgegeben wurde. |
|
| $parameter_number Pflicht | int | 1-basierter Index des Platzhalter-Parameters (?) in der SQL-Anweisung, an den die Variable gebunden werden soll. |
|
| $variable_name Pflicht | string | Der Name der PHP-Variable als Zeichenkette (ohne $), z. B. 'meinWert'. Die Variable wird per Referenz gebunden. |
|
| $parameter_type | int | DB2_PARAM_IN | Bestimmt die Richtung des Parameters. Mögliche Werte: DB2_PARAM_IN (Eingabe), DB2_PARAM_OUT (Ausgabe), DB2_PARAM_INOUT (Eingabe und Ausgabe), DB2_PARAM_FILE (Dateiname für LOB-Daten). |
| $data_type | int | 0 | SQL-Datentyp des Parameters, z. B. DB2_CHAR, DB2_LONG, DB2_DOUBLE oder DB2_BINARY. Der Wert 0 bewirkt automatische Typerkennung. |
| $precision | int | -1 | Präzision des Parameters, relevant für numerische Typen sowie für XML oder CLOB/BLOB. Der Wert -1 bedeutet automatisch. |
| $scale | int | 0 | Anzahl der Dezimalstellen für numerische Typen. Standard ist 0. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiger Parameter-Index oder ungültiges Statement).Beispiele
Einfaches Eingabe-Binding für eine SELECT-Abfrage
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
$sql = 'SELECT vorname, nachname FROM mitarbeiter WHERE abteilung = ?';
$stmt = db2_prepare($conn, $sql);
$abteilung = 'Entwicklung';
db2_bind_param($stmt, 1, 'abteilung', DB2_PARAM_IN);
if (db2_execute($stmt)) {
while ($row = db2_fetch_assoc($stmt)) {
echo $row['VORNAME'] . ' ' . $row['NACHNAME'] . "\n";
}
}
db2_close($conn);
}
Ausgabe-Parameter einer gespeicherten Prozedur lesen
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
// Gespeicherte Prozedur erwartet Mitarbeiter-ID als IN und gibt Gehalt als OUT zurück
$sql = 'CALL hole_gehalt(?, ?)';
$stmt = db2_prepare($conn, $sql);
$mitarbeiterId = 42;
$gehalt = null;
db2_bind_param($stmt, 1, 'mitarbeiterId', DB2_PARAM_IN);
db2_bind_param($stmt, 2, 'gehalt', DB2_PARAM_OUT, DB2_LONG);
if (db2_execute($stmt)) {
echo 'Gehalt des Mitarbeiters: ' . $gehalt . ' EUR';
}
db2_close($conn);
}
CLOB-Daten aus Datei einlesen (DB2_PARAM_FILE)
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
$sql = 'INSERT INTO dokumente (id, inhalt) VALUES (?, ?)';
$stmt = db2_prepare($conn, $sql);
$id = 1;
$dateiPfad = '/tmp/dokument.txt';
db2_bind_param($stmt, 1, 'id', DB2_PARAM_IN);
// Dateiinhalt direkt als CLOB einfügen
db2_bind_param($stmt, 2, 'dateiPfad', DB2_PARAM_FILE, DB2_CHAR);
if (db2_execute($stmt)) {
echo 'Dokument erfolgreich gespeichert.';
}
db2_close($conn);
}
// Wichtig · Fallstricke
Sicherheit: Die Parameterbindung über db2_bind_param() ist die empfohlene Methode, um SQL-Injection zu verhindern. Werte werden niemals direkt in den SQL-Text interpoliert, sondern getrennt an den Datenbankserver übertragen.
Referenzbindung: Die Variable wird per Referenz gebunden. Der tatsächlich an die Datenbank gesendete Wert wird erst beim Aufruf von db2_execute() gelesen. Änderungen an der Variable zwischen db2_bind_param() und db2_execute() wirken sich also auf den Abfrage-Parameter aus.
Voraussetzung: Die Funktion setzt die PHP-Erweiterung ibm_db2 voraus. Ohne diese Erweiterung ist die Funktion nicht verfügbar. Für PDO-basierte DB2-Zugriffe steht stattdessen PDOStatement::bindParam() zur Verfügung.