Signatur
Beschreibung
Das Interface mysql_xdevapi\CrudOperationBindable gehört zur MySQL X DevAPI-Erweiterung (mysql_xdevapi) und wird von CRUD-Operationsklassen implementiert, die das Binden von benannten Parametern an Ausdrücke (z. B. Filterbedingungen) ermöglichen.
Über die bind()-Methode, die dieses Interface vorschreibt, können Platzhalter in Kriterien-Ausdrücken sicher mit konkreten Werten belegt werden. Dieses Muster schützt vor Injection-Angriffen und fördert die Wiederverwendbarkeit von Ausdrücken, da dieselbe Abfrage mit unterschiedlichen Parameterwerten ausgeführt werden kann.
Klassen wie mysql_xdevapi\CollectionFind, mysql_xdevapi\CollectionModify oder mysql_xdevapi\CollectionRemove implementieren dieses Interface und erlauben es, Platzhalter der Form :name in where-Ausdrücken durch konkrete Werte zu ersetzen, bevor die Operation ausgeführt wird.
Das Interface ist Teil des MySQL X Protocol-Stacks und richtet sich an Anwendungen, die mit einem MySQL 8-Server über das X Protocol kommunizieren und document-store-basierte oder relationale CRUD-Operationen ausführen.
Beispiele
Parameter an eine CollectionFind-Abfrage binden
<?php
// Verbindung zur MySQL-Datenbank über X DevAPI
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('users');
// CollectionFind implementiert CrudOperationBindable
// Platzhalter :minAge wird per bind() mit einem konkreten Wert belegt
$result = $collection
->find('age > :minAge AND active = :active')
->bind(['minAge' => 18, 'active' => true])
->execute();
foreach ($result->fetchAll() as $doc) {
echo $doc['name'] . PHP_EOL;
}
Parameter an eine CollectionModify-Operation binden
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('products');
// CollectionModify implementiert ebenfalls CrudOperationBindable
// Platzhalter :id und :newPrice werden sicher gebunden
$collection
->modify('_id = :id')
->bind(['id' => 'prod-42'])
->set('price', 29.99)
->execute();
echo 'Preis erfolgreich aktualisiert.' . PHP_EOL;
// Wichtig · Fallstricke
Sicherheit: Das Binden von Parametern über bind() ist dem direkten Einbetten von Werten in Ausdrucks-Strings vorzuziehen, da es Injection-Angriffe verhindert. Nutzer-Eingaben sollten niemals direkt in Ausdrucks-Strings konkateniert werden.
Voraussetzung: Die Erweiterung mysql_xdevapi erfordert einen MySQL 8.0-Server (oder neuer) mit aktiviertem X Plugin sowie die PECL-Erweiterung mysql_xdevapi. Sie ist nicht im Standard-PHP-Paket enthalten und muss separat installiert werden.
Hinweis: Platzhalter werden mit einem vorangestellten Doppelpunkt (:name) in Ausdrücken notiert. Alle im Ausdruck verwendeten Platzhalter müssen vor dem Aufruf von execute() gebunden sein, sonst kommt es zu einem Laufzeitfehler.