Start · Sprachen · PHP · Referenz · ibase_name_result

ibase_name_result

Funktion

Weist einer InterBase/Firebird-Ergebnismenge einen Namen zu, über den sie später referenziert werden kann.

seit PHP 5.0.0 Kategorie: db

Signatur

ibase_name_result(resource $result, string $name): bool

Beschreibung

ibase_name_result() ordnet einer bestehenden Ergebnismenge (Query-Result) einen symbolischen Namen zu. Dieser Name kann anschließend genutzt werden, um über positioniertes Aktualisieren oder Löschen (Positioned Update/Delete) gezielt auf den aktuellen Datensatz des Cursors zu verweisen – typischerweise über SQL-Anweisungen wie UPDATE … WHERE CURRENT OF name oder DELETE … WHERE CURRENT OF name.

Diese Technik ist besonders bei Cursor-basierten Operationen in InterBase- und Firebird-Datenbanken nützlich, wenn Zeile für Zeile verarbeitet und dabei einzelne Datensätze direkt modifiziert oder gelöscht werden sollen, ohne eine separate WHERE-Bedingung formulieren zu müssen.

Die Funktion gehört zur ibase_-Erweiterung (InterBase/Firebird), die ab PHP 7.4 aus dem PHP-Kern entfernt und in die PECL-Erweiterung ibase ausgelagert wurde. Für aktuelle Projekte empfiehlt sich die Nutzung über PECL oder alternativ der Wechsel zur Firebird/InterBase-PDO-Unterstützung.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Eine gültige Ergebnismenge, die zuvor mit ibase_query() oder ibase_execute() erzeugt wurde.
$name Pflicht string Der symbolische Name (Cursor-Name), der der Ergebnismenge zugewiesen werden soll. Dieser Name wird in SQL-Anweisungen wie WHERE CURRENT OF name referenziert.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false im Fehlerfall (z. B. wenn die übergebene Ergebnismenge ungültig ist).

Beispiele

Ergebnismenge benennen und positioniertes Update ausführen

<?php
$dbh = ibase_connect('localhost:mydatabase', 'username', 'password');

// Ergebnismenge öffnen
$result = ibase_query($dbh, 'SELECT id, price FROM products FOR UPDATE');

// Ergebnismenge einen Cursor-Namen zuweisen
ibase_name_result($result, 'products_cursor');

// Zeile für Zeile verarbeiten
while ($row = ibase_fetch_object($result)) {
    if ($row->price < 10.0) {
        // Positioniertes Update: aktuellen Datensatz des Cursors aktualisieren
        ibase_query($dbh, 'UPDATE products SET price = 10.0 WHERE CURRENT OF products_cursor');
    }
}

ibase_free_result($result);
ibase_close($dbh);
?>

Ergebnismenge benennen und positioniertes Delete ausführen

<?php
$dbh = ibase_connect('localhost:mydatabase', 'username', 'password');

$result = ibase_query($dbh, 'SELECT id, stock FROM products FOR UPDATE');

// Cursor-Namen vergeben
$named = ibase_name_result($result, 'del_cursor');
if (!$named) {
    die('Fehler beim Benennen der Ergebnismenge.');
}

// Datensätze ohne Bestand löschen
while ($row = ibase_fetch_object($result)) {
    if ($row->stock == 0) {
        ibase_query($dbh, 'DELETE FROM products WHERE CURRENT OF del_cursor');
    }
}

ibase_free_result($result);
ibase_close($dbh);
?>

// Wichtig · Fallstricke

Deprecation/Entfernung: Die gesamte ibase_-Erweiterung wurde mit PHP 7.4 aus dem PHP-Core entfernt. Ab PHP 7.4 muss die PECL-Erweiterung ibase separat installiert werden. Für neue Projekte sollte PDO mit dem Firebird-Treiber (pdo_firebird) in Betracht gezogen werden.

Der Cursor-Name muss den Namenskonventionen von InterBase/Firebird entsprechen (alphanumerisch, max. 31 Zeichen, beginnt mit einem Buchstaben). Ein ungültiger Name kann zu Datenbankfehlern bei der Ausführung der positionierten SQL-Anweisungen führen.

Die Ergebnismenge muss mit einer FOR UPDATE-Klausel abgefragt worden sein, damit positioniertes Aktualisieren oder Löschen überhaupt möglich ist.