Signatur
Beschreibung
Die Klasse mysql_xdevapi\CollectionModify ist Teil der MySQL X DevAPI und wird verwendet, um Dokumente in einer MySQL-Collection zu aktualisieren. Instanzen dieser Klasse werden typischerweise nicht direkt erzeugt, sondern durch den Aufruf von Collection::modify() mit einem Such-Ausdruck zurückgegeben, der bestimmt, welche Dokumente geändert werden sollen.
Das Objekt bietet eine Fluent-Interface-API (Method-Chaining), mit der sich komplexe Modify-Operationen schrittweise zusammenbauen lassen. Zu den unterstützten Operationen zählen das Setzen von Feldern (set()), das Entfernen von Feldern (unset()), das Ersetzen von Feldwerten (replace()), das Anhängen an Arrays (arrayAppend()) sowie das Einfügen in Arrays (arrayInsert()).
Der Such-Ausdruck (Condition) wird in der X DevAPI-Syntax angegeben und kann Platzhalter enthalten, die über bind() sicher mit Werten befüllt werden. Die eigentliche Ausführung der Operation erfolgt erst beim Aufruf der execute()-Methode, die ein Result-Objekt zurückgibt.
Diese Klasse ist besonders nützlich beim Arbeiten mit JSON-Dokumenten in MySQL 8+, wenn strukturierte NoSQL-Daten über die X DevAPI gepflegt werden sollen, ohne direktes SQL zu schreiben.
Beispiele
Einfaches Aktualisieren eines Feldes in passenden Dokumenten
<?php
// Verbindung über X DevAPI aufbauen
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meine_datenbank');
$collection = $schema->getCollection('benutzer');
// Modify-Operation: E-Mail-Adresse für einen bestimmten Benutzer aktualisieren
$result = $collection
->modify('vorname = :name')
->bind(['name' => 'Max'])
->set('email', 'max.neu@example.com')
->execute();
echo 'Geänderte Dokumente: ' . $result->getAffectedItemsCount();
Mehrere Felder setzen und ein Feld entfernen mit Sortierung und Limit
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meine_datenbank');
$collection = $schema->getCollection('produkte');
// Mehrere Operationen kombinieren
$result = $collection
->modify('preis < :maxpreis')
->bind(['maxpreis' => 10.00])
->set('rabatt', true)
->set('aktionspreis', 7.99)
->unset(['altpreis'])
->sort('name ASC')
->limit(5)
->execute();
echo 'Aktualisierte Produkte: ' . $result->getAffectedItemsCount();
// Wichtig · Fallstricke
Sicherheitshinweis: Verwende stets bind() für benutzerseitige Eingaben im Such-Ausdruck, anstatt Werte direkt in den Ausdruck-String zu interpolieren. Dies verhindert Injection-Angriffe auf die X DevAPI-Ausdrucks-Syntax.
Wichtig: Die execute()-Methode muss explizit aufgerufen werden, da die Operation sonst nicht ausgeführt wird. Alle vorherigen Method-Calls bereiten lediglich die Operation vor.
Die Klasse steht nur zur Verfügung, wenn die PHP-Erweiterung mysql_xdevapi installiert und aktiviert ist. Diese Erweiterung setzt MySQL Server 8.0+ mit aktiviertem X Plugin sowie die libmysqlxclient-Bibliothek voraus.