Start · Sprachen · PHP · Referenz · odbc_exec

odbc_exec

Funktion

Führt einen SQL-Befehl direkt über eine ODBC-Verbindung aus und gibt ein Ergebnis-Handle zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_exec(resource $odbc, string $query): resource|false

Beschreibung

odbc_exec() sendet einen SQL-Befehl an eine bestehende ODBC-Datenbankverbindung und führt ihn unmittelbar aus. Die Funktion kombiniert intern odbc_prepare() und odbc_execute(), eignet sich also besonders für einmalig auszuführende Abfragen ohne Parameter-Binding.

Bei Erfolg liefert sie ein Ergebnis-Handle (resource), das anschließend mit Funktionen wie odbc_fetch_row(), odbc_fetch_array() oder odbc_num_rows() weiterverarbeitet werden kann. Bei einem Fehler wird false zurückgegeben; Fehlerdetails lassen sich über odbc_errormsg() bzw. odbc_error() auslesen.

ODBC (Open Database Connectivity) ist eine generische Datenbankschnittstelle, die den Zugriff auf viele verschiedene Datenbanksysteme (z. B. Microsoft SQL Server, IBM DB2, MySQL via ODBC-Treiber) über einen einheitlichen API ermöglicht. odbc_exec() ist damit plattform- und datenbankunabhängig einsetzbar.

Für wiederholt auszuführende Abfragen oder Abfragen mit variablen Parametern sollte stattdessen odbc_prepare() kombiniert mit odbc_execute() verwendet werden, um sowohl Performance als auch Sicherheit (SQL-Injection-Schutz) zu verbessern.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine gültige ODBC-Verbindungsressource, wie sie von odbc_connect() oder odbc_pconnect() zurückgegeben wird.
$query Pflicht string Der auszuführende SQL-Befehl als Zeichenkette. Es können beliebige gültige SQL-Anweisungen übergeben werden (z. B. SELECT, INSERT, UPDATE, DELETE, DDL-Befehle).

Rückgabewert

Typ
resource|false
Beschreibung
Bei Erfolg wird ein ODBC-Ergebnis-Handle (resource) zurückgegeben, das für nachfolgende Ergebnis-Funktionen genutzt werden kann. Im Fehlerfall wird false zurückgegeben.

Beispiele

Einfache SELECT-Abfrage mit odbc_exec

<?php
// Verbindung herstellen
$dsn  = 'MyDSN';
$user = 'db_user';
$pass = 'db_pass';

$conn = odbc_connect($dsn, $user, $pass);
if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

// SQL-Abfrage direkt ausführen
$sql    = "SELECT id, name, email FROM users WHERE active = 1";
$result = odbc_exec($conn, $sql);

if ($result === false) {
    die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}

// Ergebnisse ausgeben
while (odbc_fetch_row($result)) {
    $id    = odbc_result($result, 'id');
    $name  = odbc_result($result, 'name');
    $email = odbc_result($result, 'email');
    echo "ID: $id | Name: $name | E-Mail: $email\n";
}

odbc_free_result($result);
odbc_close($conn);
ID: 1 | Name: Max Mustermann | E-Mail: max@example.com ID: 2 | Name: Erika Muster | E-Mail: erika@example.com

INSERT-Befehl ausführen und Erfolg prüfen

<?php
$conn = odbc_connect('MyDSN', 'db_user', 'db_pass');
if (!$conn) {
    die('Verbindung fehlgeschlagen');
}

// ACHTUNG: Benutzerdaten sollten niemals direkt eingebettet werden!
// Für parametrisierte Abfragen odbc_prepare() + odbc_execute() verwenden.
$name  = 'Neuer Nutzer';
$email = 'neu@example.com';

$sql = "INSERT INTO users (name, email, active) "
     . "VALUES ('" . addslashes($name) . "', '" . addslashes($email) . "', 1)";

$result = odbc_exec($conn, $sql);

if ($result === false) {
    echo 'Einfügen fehlgeschlagen: ' . odbc_errormsg($conn) . "\n";
} else {
    echo "Datensatz erfolgreich eingefügt.\n";
}

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

// Wichtig · Fallstricke

Sicherheitshinweis (SQL-Injection): odbc_exec() führt den SQL-String unverändert aus. Werden externe Daten (z. B. Formulareingaben) direkt in den Query eingebettet, besteht ein erhebliches SQL-Injection-Risiko. Es wird dringend empfohlen, für parameterisierte Abfragen stattdessen odbc_prepare() in Kombination mit odbc_execute() zu verwenden, da diese eine sichere Trennung von SQL-Code und Daten gewährleisten.

Ressourcen freigeben: Das zurückgegebene Ergebnis-Handle sollte nach der Verwendung mit odbc_free_result() freigegeben werden, um Speicher zu sparen – insbesondere bei großen Ergebnismengen oder in Schleifen.

Kompatibilität: odbc_exec() ist ein Alias für odbc_do(); beide Funktionen sind identisch in ihrer Funktionsweise. Ab PHP 8.0 werden ODBC-Ressourcen intern als \ODBC\Connection- und \ODBC\Result-Objekte behandelt, die Funktion ist aber weiterhin verfügbar.