Start · Sprachen · PHP · Referenz · mysql_xdevapi\CollectionAdd

mysql_xdevapi\CollectionAdd

Klasse

Repräsentiert eine Add-Operation auf einer <code>Collection</code> im MySQL X DevAPI und ermöglicht das Einfügen von Dokumenten in eine Collection.

seit PHP 7.4.0 Kategorie: db

Signatur

class mysql_xdevapi\CollectionAdd

Beschreibung

mysql_xdevapi\CollectionAdd ist eine Operationsklasse, die im Rahmen der MySQL X DevAPI für das Einfügen von JSON-Dokumenten in eine Collection zuständig ist. Objekte dieser Klasse werden nicht direkt instanziiert, sondern über die Methode Collection::add() erzeugt. Das ermöglicht das fluente (method-chaining) Aufbauen von Einfüge-Operationen.

Die Klasse unterstützt das Hinzufügen einzelner oder mehrerer Dokumente in einem einzigen Methodenaufruf. Intern werden die Dokumente als JSON-Objekte (PHP-Arrays oder JSON-Strings) übergeben. Bei der Ausführung via execute() werden alle gepufferten Dokumente in die Collection eingefügt. Fehlende Primärschlüssel (_id-Felder) werden dabei automatisch von MySQL generiert.

Diese Klasse ist besonders geeignet, wenn dokumentenorientierte Daten ohne vorher definiertes Schema in einer MySQL-Datenbank gespeichert werden sollen, beispielsweise in modernen NoSQL-Anwendungsfällen innerhalb von MySQL 8+. Die X DevAPI bietet dafür eine objektorientierte Alternative zum klassischen SQL-Interface.

Zu beachten ist, dass die Extension mysql_xdevapi separat installiert werden muss und einen laufenden MySQL-Server mit aktiviertem X Protocol (Port 33060) benötigt.

Beispiele

Ein einzelnes Dokument in eine Collection einfügen

<?php
// Verbindung zur MySQL X DevAPI
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');

$schema     = $session->getSchema('meine_datenbank');
$collection = $schema->getCollection('benutzer');

// Dokument als assoziatives PHP-Array einfügen
$result = $collection
    ->add(['name' => 'Anna Müller', 'alter' => 28, 'aktiv' => true])
    ->execute();

echo 'Eingefügte Dokumente: ' . $result->getAffectedItemsCount() . PHP_EOL;
echo 'Generierte ID: ' . implode(', ', $result->getGeneratedIds()) . PHP_EOL;
Eingefügte Dokumente: 1 Generierte ID: 00006239f3310000000000000001

Mehrere Dokumente auf einmal einfügen (Batch-Insert)

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');

$schema     = $session->getSchema('meine_datenbank');
$collection = $schema->getCollection('produkte');

$dokumente = [
    ['name' => 'Laptop',  'preis' => 999.99, 'lager' => 15],
    ['name' => 'Maus',    'preis' =>  19.95, 'lager' => 200],
    ['name' => 'Tastatur','preis' =>  49.50, 'lager' => 80],
];

// Alle Dokumente in einem Aufruf übergeben
$result = $collection
    ->add($dokumente)
    ->execute();

echo 'Eingefügte Dokumente: ' . $result->getAffectedItemsCount() . PHP_EOL;

foreach ($result->getGeneratedIds() as $id) {
    echo 'ID: ' . $id . PHP_EOL;
}
Eingefügte Dokumente: 3 ID: 00006239f3310000000000000002 ID: 00006239f3310000000000000003 ID: 00006239f3310000000000000004

// Wichtig · Fallstricke

Installationsvoraussetzung: Die Extension mysql_xdevapi muss über PECL installiert und in der php.ini aktiviert sein (extension=mysql_xdevapi). Sie ist nicht im PHP-Kern enthalten.

X Protocol: MySQL muss mit aktiviertem X Plugin laufen (standardmäßig Port 33060). Klassische MySQL-Verbindungen (Port 3306) werden von dieser API nicht unterstützt.

Automatische _id-Vergabe: Wird kein _id-Feld in einem Dokument angegeben, generiert der Server automatisch eine eindeutige ID. Es ist jedoch möglich, eigene IDs zu vergeben, solange sie eindeutig in der Collection sind.

Sicherheit: Da Dokumente als PHP-Strukturen übergeben werden, entfällt das klassische SQL-Injection-Risiko. Dennoch sollten Eingaben aus Benutzereingaben stets validiert werden, bevor sie in die Collection eingefügt werden, um unerwünschte Datenstrukturen zu verhindern.