Start · Sprachen · PHP · Referenz · odbc_cursor

odbc_cursor

Funktion

Gibt den Cursornamen eines aktiven ODBC-Statement-Handles zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_cursor(resource $statement): string|false

Beschreibung

odbc_cursor() liefert den Cursornamen, der einem ODBC-Statement-Handle zugeordnet ist. Cursor sind benannte Zeiger auf ein Ergebnis-Set innerhalb einer ODBC-Verbindung und werden intern vom ODBC-Treiber verwaltet.

Der zurückgegebene Cursorname kann genutzt werden, um in positionierten UPDATE- oder DELETE-Anweisungen (UPDATE ... WHERE CURRENT OF cursor_name) gezielt auf die aktuell ausgewählte Zeile zu verweisen. Dies ist besonders hilfreich, wenn man über ein Ergebnis-Set iteriert und Zeilen direkt an der aktuellen Cursorposition aktualisieren oder löschen möchte, ohne die Primärschlüssel explizit kennen zu müssen.

Diese Funktion ist Teil der ODBC-Erweiterung von PHP und funktioniert mit jeder Datenbank, die über einen ODBC-Treiber angesprochen wird, wie z. B. Microsoft SQL Server, IBM DB2, oder PostgreSQL via ODBC. Sie eignet sich hauptsächlich für Szenarien, in denen serverseitige Cursor und positionierte Aktualisierungen unterstützt werden.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges ODBC-Statement-Handle, wie es von odbc_exec(), odbc_prepare() oder ähnlichen Funktionen zurückgegeben wird.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Cursornamen als string zurück, der dem Statement-Handle zugeordnet ist. Im Fehlerfall (z. B. ungültiges Handle) wird false zurückgegeben.

Beispiele

Cursornamen eines ODBC-Statements ausgeben

<?php
$dsn  = 'myDSN';
$user = 'dbuser';
$pass = 'secret';

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

$sql  = 'SELECT id, name FROM kunden';
$stmt = odbc_exec($conn, $sql);
if (!$stmt) {
    die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}

$cursorName = odbc_cursor($stmt);
echo 'Cursorname: ' . $cursorName . PHP_EOL;

odbc_free_result($stmt);
odbc_close($conn);
?>
Cursorname: SQL_CUR0000001

Positioniertes UPDATE mit Cursornamen

<?php
$dsn  = 'myDSN';
$user = 'dbuser';
$pass = 'secret';

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

// Ergebnis-Set öffnen
$sql  = 'SELECT id, preis FROM produkte FOR UPDATE OF preis';
$stmt = odbc_exec($conn, $sql);
if (!$stmt) {
    die('Abfrage fehlgeschlagen: ' . odbc_errormsg($conn));
}

$cursorName = odbc_cursor($stmt);

// Durch das Ergebnis-Set iterieren
while (odbc_fetch_row($stmt)) {
    $preis = odbc_result($stmt, 'preis');

    // Nur Preise unter 10 Euro anpassen
    if ($preis < 10.00) {
        $updateSql  = "UPDATE produkte SET preis = preis * 1.1 WHERE CURRENT OF $cursorName";
        $updateStmt = odbc_exec($conn, $updateSql);
        if ($updateStmt) {
            echo 'Preis aktualisiert.' . PHP_EOL;
        }
    }
}

odbc_free_result($stmt);
odbc_close($conn);
?>
Preis aktualisiert. Preis aktualisiert.

// Wichtig · Fallstricke

Hinweis zur Treiberunterstützung: Nicht alle ODBC-Treiber unterstützen benannte Cursor oder positionierte Aktualisierungen. Ob WHERE CURRENT OF cursor_name funktioniert, hängt vom jeweiligen Datenbankserver und ODBC-Treiber ab. Prüfen Sie die Dokumentation Ihres Treibers.

Deprecated/Hinweis: Die ODBC-Erweiterung gilt als veraltetes Interface für neue Projekte. Für datenbankspezifische Anbindungen sollte nach Möglichkeit PDO oder eine spezifische Datenbankerweiterung (z. B. sqlsrv, pgsql) bevorzugt werden.