Signatur
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
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.