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