Start · Sprachen · PHP · Referenz · db2_execute

db2_execute

Funktion

Führt eine mit <code>db2_prepare()</code> vorbereitete SQL-Anweisung aus und bindet optional Parameter.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_execute(resource $stmt, array $parameters = []): bool

Beschreibung

db2_execute() führt eine zuvor mit db2_prepare() vorbereitete SQL-Anweisung gegen eine IBM DB2-, Cloudscape- oder Apache-Derby-Datenbank aus. Dabei können Eingabeparameter (Platzhalter ?) direkt als Array übergeben werden, ohne dass zuvor db2_bind_param() aufgerufen werden muss.

Die Funktion ist besonders sinnvoll, wenn dieselbe SQL-Anweisung mehrfach mit verschiedenen Parametern ausgeführt werden soll, da der Parse- und Planungsaufwand des Datenbankservers nur einmalig anfällt. Dies verbessert die Performance bei Schleifen oder Batch-Operationen erheblich.

Parameterübergabe per Array schützt automatisch vor SQL-Injection, da die Werte separat vom SQL-Text an die Datenbank übermittelt werden. Für komplexere Szenarien (z. B. IN/OUT-Parameter bei Stored Procedures) kann alternativ db2_bind_param() verwendet werden, bevor db2_execute() ohne Parameter-Array aufgerufen wird.

Nach erfolgreichem Aufruf kann das Statement-Handle mit Funktionen wie db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() zum Abrufen von Ergebniszeilen verwendet werden.

Parameter

Name Typ Default Beschreibung
$stmt Pflicht resource Ein vorbereitetes Statement-Handle, das zuvor von db2_prepare() zurückgegeben wurde.
$parameters array [] Ein indiziertes Array mit Werten für die ?-Platzhalter der vorbereiteten Anweisung. Die Reihenfolge muss der Reihenfolge der Platzhalter im SQL-String entsprechen. Wird das Array weggelassen, müssen Parameter zuvor über db2_bind_param() gebunden worden sein.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Anweisung erfolgreich ausgeführt wurde, andernfalls false. Im Fehlerfall können mit db2_stmt_error() und db2_stmt_errormsg() nähere Informationen abgerufen werden.

Beispiele

Einfügen mehrerer Datensätze mit Schleife

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $sql = 'INSERT INTO employees (first_name, last_name, salary) VALUES (?, ?, ?)';
    $stmt = db2_prepare($conn, $sql);

    if ($stmt) {
        $employees = [
            ['Max',    'Mustermann', 45000.00],
            ['Erika',  'Musterfrau', 52000.00],
            ['Klaus',  'Beispiel',   39500.00],
        ];

        foreach ($employees as $emp) {
            $result = db2_execute($stmt, $emp);
            if (!$result) {
                echo 'Fehler: ' . db2_stmt_errormsg($stmt) . PHP_EOL;
            }
        }
        echo 'Alle Datensätze eingefügt.' . PHP_EOL;
    }
    db2_close($conn);
}
Alle Datensätze eingefügt.

SELECT-Abfrage mit Parameter und Ergebnisverarbeitung

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');

if ($conn) {
    $sql    = 'SELECT first_name, last_name, salary FROM employees WHERE salary > ?';
    $stmt   = db2_prepare($conn, $sql);

    if ($stmt) {
        $minSalary = 40000.00;
        $result    = db2_execute($stmt, [$minSalary]);

        if ($result) {
            while ($row = db2_fetch_assoc($stmt)) {
                printf(
                    "%s %s — Gehalt: %.2f EUR\n",
                    $row['FIRST_NAME'],
                    $row['LAST_NAME'],
                    $row['SALARY']
                );
            }
        } else {
            echo 'Fehler beim Ausführen: ' . db2_stmt_errormsg($stmt);
        }
    }
    db2_close($conn);
}
Max Mustermann — Gehalt: 45000.00 EUR Erika Musterfrau — Gehalt: 52000.00 EUR

// Wichtig · Fallstricke

Sicherheit: Parameter, die als Array an db2_execute() übergeben werden, schützen zuverlässig vor SQL-Injection, da der Datenbankserver Daten und SQL-Logik strikt trennt. Niemals Benutzereingaben direkt in einen SQL-String interpolieren.

Stored Procedures / IN-OUT-Parameter: Bei Prozeduren mit Ausgabeparametern muss db2_bind_param() mit dem Typ DB2_PARAM_OUT oder DB2_PARAM_INOUT verwendet werden; das Parameter-Array von db2_execute() unterstützt nur Eingabewerte.

Ressourcen-Verwaltung: Statement-Handles bleiben nach dem Aufruf wiederverwendbar. Erst nach dem abschließenden Einsatz sollten sie mit db2_free_stmt() freigegeben werden, um Ressourcen zu schonen.

Fehlerbehebung: Gibt die Funktion false zurück, liefern db2_stmt_error() den SQLSTATE-Code und db2_stmt_errormsg() eine lesbare Fehlerbeschreibung.