Start · Sprachen · PHP · Referenz · mysql_xdevapi\CrudOperationBindable

mysql_xdevapi\CrudOperationBindable

Interface

Interface für CRUD-Operationen, die das Binden von Parametern an Platzhalter in Ausdrücken unterstützen.

seit PHP 7.4.0 Kategorie: db

Signatur

interface mysql_xdevapi\CrudOperationBindable

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;
Preis erfolgreich aktualisiert.

// 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.