Start · Sprachen · PHP · Referenz · odbc_execute

odbc_execute

Funktion

Führt einen mit <code>odbc_prepare()</code> vorbereiteten SQL-Befehl gegen eine ODBC-Datenbank aus.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_execute(resource $statement, array $params = []): bool

Beschreibung

odbc_execute() führt eine zuvor mit odbc_prepare() vorbereitete SQL-Anweisung aus. Dieser zweistufige Ansatz (Vorbereiten + Ausführen) entspricht dem Prepared-Statement-Muster und ermöglicht es, dieselbe Anweisung mehrfach mit unterschiedlichen Parameterwerten effizient auszuführen.

Der optionale Parameter params ist ein Array von Werten, die den Platzhaltern (?) in der vorbereiteten Anweisung der Reihe nach zugeordnet werden. Ist ein Wert in einfache Hochkommata eingeschlossen (z. B. 'value'), wird er als IN/OUT- oder OUT-Parameter behandelt; andernfalls als gewöhnlicher IN-Parameter.

Die Funktion eignet sich besonders für wiederholte Ausführungen derselben Abfrage (z. B. Batch-Inserts) sowie für parametrische Abfragen, bei denen Benutzereingaben als Parameter übergeben werden sollen, um SQL-Injection zu vermeiden.

Bei Abfragen, die Ergebnismengen liefern (z. B. SELECT), kann nach dem Aufruf von odbc_execute() mit Funktionen wie odbc_fetch_row() oder odbc_result() auf die Daten zugegriffen werden.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein ODBC-Ressource-Handle, das von odbc_prepare() zurückgegeben wurde.
$params array [] Ein optionales Array von Werten, die den ?-Platzhaltern in der vorbereiteten Anweisung zugeordnet werden. Werte, die als IN/OUT- oder OUT-Parameter dienen sollen, müssen in einfache Hochkommata eingeschlossen sein.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Parameter, Datenbankfehler).

Beispiele

Einfacher INSERT mit Parametern

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

$stmt = odbc_prepare($conn, 'INSERT INTO kunden (name, email) VALUES (?, ?)');
if (!$stmt) {
    die('Vorbereitung fehlgeschlagen: ' . odbc_errormsg($conn));
}

$params = ['Max Mustermann', 'max@example.com'];
if (odbc_execute($stmt, $params)) {
    echo 'Datensatz erfolgreich eingefügt.';
} else {
    echo 'Fehler beim Einfügen: ' . odbc_errormsg($conn);
}

odbc_close($conn);
Datensatz erfolgreich eingefügt.

Batch-Inserts mit mehrfacher Ausführung derselben vorbereiteten Anweisung

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

$stmt = odbc_prepare($conn, 'INSERT INTO produkte (bezeichnung, preis) VALUES (?, ?)');
if (!$stmt) {
    die('Vorbereitung fehlgeschlagen.');
}

$produkte = [
    ['Apfel',  0.99],
    ['Banane', 0.49],
    ['Kirsche', 1.29],
];

foreach ($produkte as $produkt) {
    if (!odbc_execute($stmt, $produkt)) {
        echo 'Fehler bei: ' . $produkt[0] . PHP_EOL;
    } else {
        echo $produkt[0] . ' erfolgreich eingefügt.' . PHP_EOL;
    }
}

odbc_close($conn);
Apfel erfolgreich eingefügt. Banane erfolgreich eingefügt. Kirsche erfolgreich eingefügt.

SELECT-Abfrage mit Parameter und Ergebnisausgabe

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'passwort');
if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

$stmt = odbc_prepare($conn, 'SELECT name, email FROM kunden WHERE id = ?');
if (!$stmt) {
    die('Vorbereitung fehlgeschlagen.');
}

if (odbc_execute($stmt, [42])) {
    while (odbc_fetch_row($stmt)) {
        $name  = odbc_result($stmt, 'name');
        $email = odbc_result($stmt, 'email');
        echo "Name: $name, E-Mail: $email" . PHP_EOL;
    }
} else {
    echo 'Abfrage fehlgeschlagen: ' . odbc_errormsg($conn);
}

odbc_close($conn);
Name: Max Mustermann, E-Mail: max@example.com

// Wichtig · Fallstricke

Sicherheit: Obwohl Prepared Statements grundsätzlich SQL-Injection verhindern, hängt das tatsächliche Escaping vom verwendeten ODBC-Treiber ab. Vertrauenswürdige Eingaben sollten dennoch immer validiert werden.

IN/OUT-Parameter: Werte, die in einfachen Hochkommata übergeben werden ('wert'), werden als IN/OUT- oder OUT-Parameter interpretiert. Dies ist treiberspezifisch und nicht bei allen ODBC-Datenbanken gleich implementiert.

Ressourcen-Verwaltung: Das Statement-Handle kann nach der Ausführung für weitere Aufrufe von odbc_execute() wiederverwendet werden, ohne odbc_prepare() erneut aufzurufen — das ist ein wesentlicher Leistungsvorteil bei Batch-Operationen.

Fehlerbehandlung: Im Fehlerfall gibt die Funktion false zurück. Detaillierte Fehlerinformationen liefern odbc_error() und odbc_errormsg().