Start · Sprachen · PHP · Referenz · mysql_xdevapi\CollectionFind

mysql_xdevapi\CollectionFind

Klasse

Repräsentiert eine Find-Operation auf einer <code>Collection</code> im MySQL X DevAPI und ermöglicht das Abrufen von JSON-Dokumenten mit flexiblen Filterkriterien.

seit PHP 8.0.0 Kategorie: db

Signatur

class CollectionFind

Beschreibung

CollectionFind ist Teil der mysql_xdevapi-Erweiterung und wird durch den Aufruf von Collection::find() erzeugt. Sie repräsentiert eine noch nicht ausgeführte Suchanfrage auf einer Collection (NoSQL-Dokumentensammlung), bei der JSON-Dokumente nach bestimmten Kriterien abgefragt werden können.

Die Klasse bietet eine Fluent-Interface-API: Methoden wie fields(), sort(), limit(), skip() und bind() können nacheinander verkettet werden, bevor execute() die Anfrage tatsächlich an den MySQL-Server sendet und ein DocResult-Objekt zurückliefert.

Typische Anwendungsfälle sind das Filtern von JSON-Dokumenten nach Feldinhalten, die Sortierung und Paginierung von Ergebnissen sowie das sichere Übergeben von Parametern über bind(), um SQL/NoSQL-Injection zu vermeiden.

  • Verwende immer bind() anstatt Benutzereingaben direkt in den Filterausdruck einzubauen.
  • Die Anfrage wird erst nach dem Aufruf von execute() zum Server gesendet.

Beispiele

Einfache Dokumentensuche mit Filter und Limit

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:pass@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('users');

// Find-Operation erzeugen und ausführen
$result = $collection
    ->find('age > 18')
    ->fields(['name', 'email'])
    ->sort('name ASC')
    ->limit(10)
    ->execute();

foreach ($result->fetchAll() as $doc) {
    echo $doc['name'] . ' - ' . $doc['email'] . PHP_EOL;
}
Alice - alice@example.com Bob - bob@example.com

Sichere Parameterübergabe mit bind()

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:pass@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('products');

$minPrice = 10.0;
$category = 'electronics';

// Benutze Platzhalter und bind() für sichere Parametrisierung
$result = $collection
    ->find('price >= :minPrice AND category = :cat')
    ->bind(['minPrice' => $minPrice, 'cat' => $category])
    ->sort('price DESC')
    ->limit(5)
    ->skip(0)
    ->execute();

foreach ($result->fetchAll() as $doc) {
    echo $doc['name'] . ': ' . $doc['price'] . ' EUR' . PHP_EOL;
}
Laptop: 999.99 EUR Smartphone: 499.00 EUR

// Wichtig · Fallstricke

Sicherheit: Baue niemals Benutzereingaben direkt in den Filterausdruck von find() ein. Nutze stattdessen benannte Platzhalter (z. B. :paramName) in Kombination mit der Methode bind(), um NoSQL-Injection-Angriffe zu verhindern.

Voraussetzungen: Die Erweiterung mysql_xdevapi ist nicht standardmäßig in PHP enthalten und muss separat über PECL installiert werden (pecl install mysql_xdevapi). Sie erfordert eine MySQL-Server-Version mit aktiviertem X Protocol (MySQL 5.7.12+).

Wichtig: CollectionFind wird nicht direkt instanziiert; das Objekt entsteht ausschließlich durch den Aufruf von Collection::find().