Signatur
Beschreibung
mysql_xdevapi\DocResult ist die Ergebnisklasse, die bei dokumentbasierten Abfragen (z. B. Collection::find()) zurückgegeben wird. Sie enthält alle gefundenen JSON-Dokumente und stellt Methoden bereit, um diese einzeln oder als Gesamtmenge abzurufen.
Dokumente werden intern als assoziative PHP-Arrays (JSON-Objekte) gespeichert. Mit fetchOne() kann jeweils ein Dokument iterativ gelesen werden, während fetchAll() die komplette Ergebnismenge auf einmal liefert. Diese Klasse eignet sich besonders in Szenarien, in denen strukturierte, schemafreie Daten aus einer MySQL-Dokumentensammlung verarbeitet werden sollen.
Da DocResult von BaseResult erbt, sind auch generelle Metadaten-Methoden wie getWarningsCount() und getWarnings() verfügbar, um Abfrage-Warnungen auszuwerten.
Die Klasse kann nicht direkt instanziiert werden – Objekte dieses Typs entstehen ausschließlich als Rückgabewert von Abfragemethoden der X DevAPI, etwa bei der Ausführung von find() auf einer Collection.
Beispiele
Alle Dokumente einer Collection abrufen
<?php
// Verbindung zur MySQL X DevAPI herstellen
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meineDatenbank');
$collection = $schema->getCollection('benutzer');
// Dokumentabfrage ausführen – liefert ein DocResult-Objekt
$result = $collection->find('alter >= 18')->execute();
// Alle Dokumente auf einmal abrufen
$dokumente = $result->fetchAll();
foreach ($dokumente as $dok) {
echo 'Name: ' . $dok['name'] . ', Alter: ' . $dok['alter'] . PHP_EOL;
}
$session->close();
Dokumente einzeln iterativ lesen mit fetchOne()
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meineDatenbank');
$collection = $schema->getCollection('produkte');
// Abfrage mit Sortierung und Limit
$result = $collection
->find('preis > 10')
->sort('preis ASC')
->limit(5)
->execute();
// Iterativ ein Dokument nach dem anderen lesen
while ($dok = $result->fetchOne()) {
echo 'Produkt: ' . $dok['bezeichnung'] . ' – Preis: ' . $dok['preis'] . ' EUR' . PHP_EOL;
}
// Warnungen prüfen
if ($result->getWarningsCount() > 0) {
foreach ($result->getWarnings() as $warnung) {
echo 'Warnung: ' . $warnung->getMessage() . PHP_EOL;
}
}
$session->close();
// Wichtig · Fallstricke
Instanziierung: DocResult-Objekte dürfen nicht manuell erzeugt werden. Sie entstehen ausschließlich durch den Aufruf von execute() auf einem CollectionFind-Objekt.
Datenformat: Jedes Dokument wird als assoziatives PHP-Array zurückgegeben. Geschachtelte JSON-Objekte erscheinen als verschachtelte Arrays. Achten Sie auf korrekte Typbehandlung bei numerischen Feldern.
Voraussetzung: Die Klasse erfordert die PHP-Erweiterung mysql_xdevapi (PECL), die separat installiert werden muss. Sie ist nicht Teil des PHP-Kerns. Kompatibel mit MySQL 8.x und dem X Protocol (Port 33060).
Speicherverbrauch: Bei sehr großen Ergebnismengen empfiehlt sich fetchOne() statt fetchAll(), um den Speicherbedarf gering zu halten.