Signatur
Beschreibung
cubrid_set_drop entfernt ein bestimmtes Element aus einer Spalte vom Typ SET, MULTISET oder SEQUENCE in einer CUBRID-Datenbank. Der Datensatz wird nicht über eine SQL-Abfrage, sondern direkt über seine OID (Object Identifier) angesprochen.
Diese Funktion ist nützlich, wenn man Mengen-Attribute eines CUBRID-Objekts gezielt manipulieren möchte, ohne einen vollständigen UPDATE-Befehl auszuführen. Sie eignet sich besonders in Szenarien, in denen objektorientierte Datenbankoperationen mit CUBRID eingesetzt werden und einzelne Set-Elemente entfernt werden sollen.
Das zu löschende Element wird als Zeichenkette übergeben und muss dem gespeicherten Wert exakt entsprechen. Ist das Element nicht im Set vorhanden, gibt die Funktion false zurück. Der Vorgang ändert den Datensatz in der Datenbank direkt und persistent.
Bevor diese Funktion verwendet werden kann, muss eine aktive Verbindung zur CUBRID-Datenbank bestehen, und die OID des betreffenden Datensatzes muss bekannt sein – sie kann z. B. über cubrid_get_cur_oid oder durch eine vorherige Abfrage ermittelt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $conn_identifier Pflicht | resource | Die aktive CUBRID-Verbindungskennung, die von cubrid_connect oder cubrid_connect_with_url zurückgegeben wurde. |
|
| $oid Pflicht | string | Die OID des Datensatzes, dessen Set-Spalte bearbeitet werden soll. Die OID hat üblicherweise das Format @pageId|slotId|volumeId, z. B. @0|1|2. |
|
| $attr_name Pflicht | string | Der Name der Set-Spalte (Attribut) des Datensatzes, aus der das Element gelöscht werden soll. | |
| $set_element Pflicht | string | Der Wert des Elements, das aus der Set-Spalte entfernt werden soll. Der Wert muss als Zeichenkette übergeben werden und exakt dem gespeicherten Wert entsprechen. |
Rückgabewert
true zurück, wenn das Element erfolgreich aus der Set-Spalte entfernt wurde. Gibt false zurück, wenn ein Fehler aufgetreten ist, die Verbindung ungültig ist, die OID nicht gefunden wurde oder das Element nicht im Set vorhanden ist.Beispiele
Element aus einer Set-Spalte entfernen
<?php
// Verbindung zur CUBRID-Datenbank herstellen
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . cubrid_error());
}
// OID des Datensatzes, z. B. zuvor per cubrid_get_cur_oid ermittelt
$oid = '@0|1|2';
// Element 'PHP' aus der Set-Spalte 'languages' entfernen
$result = cubrid_set_drop($conn, $oid, 'languages', 'PHP');
if ($result) {
echo "Element erfolgreich entfernt.\n";
} else {
echo "Fehler beim Entfernen: " . cubrid_error($conn) . "\n";
}
cubrid_disconnect($conn);
?>
Element prüfen und dann aus Set entfernen
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
$oid = '@0|2|5';
$attr = 'tags';
$elementToRemove = 'outdated';
// Aktuellen Inhalt des Sets auslesen
$current = cubrid_get($conn, $oid, $attr);
echo "Vorher: " . implode(', ', $current[$attr]) . "\n";
// Element entfernen
if (in_array($elementToRemove, $current[$attr])) {
$res = cubrid_set_drop($conn, $oid, $attr, $elementToRemove);
if ($res) {
$updated = cubrid_get($conn, $oid, $attr);
echo "Nachher: " . implode(', ', $updated[$attr]) . "\n";
} else {
echo "Fehler beim Entfernen des Elements.\n";
}
} else {
echo "Element '{$elementToRemove}' nicht im Set vorhanden.\n";
}
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
Voraussetzung: Die CUBRID-PHP-Erweiterung muss installiert und aktiviert sein. Diese ist nicht standardmäßig in PHP enthalten und muss separat über PECL oder den CUBRID-Treiber installiert werden.
Transaktionen: Änderungen, die über OID-Operationen wie cubrid_set_drop vorgenommen werden, unterliegen dem aktuellen Transaktionskontext. Bei aktiviertem Auto-Commit werden sie sofort persistiert, andernfalls muss cubrid_commit aufgerufen werden.
Typsicherheit: Das Element muss als Zeichenkette übergeben werden. Bei numerischen Set-Werten ist darauf zu achten, dass die korrekte Stringdarstellung verwendet wird, da ein exakter Vergleich stattfindet.