Start · Sprachen · PHP · Referenz · db2_bind_param

db2_bind_param

Funktion

Bindet eine PHP-Variable an einen SQL-Anweisungsparameter eines vorbereiteten Statements.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_bind_param(resource $stmt, int $parameter_number, string $variable_name, int $parameter_type = DB2_PARAM_IN, int $data_type = 0, int $precision = -1, int $scale = 0): bool

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

Typ
bool
Beschreibung
Gibt 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);
}
Max Mustermann Erika Beispiel

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);
}
Gehalt des Mitarbeiters: 52000 EUR

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);
}
Dokument erfolgreich gespeichert.

// 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.