Signatur
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
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);
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);
// 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.