Signatur
Beschreibung
Das mysql_xdevapi\Executable-Interface gehört zur MySQL X DevAPI-Erweiterung (mysql_xdevapi) und bildet die gemeinsame Schnittstelle für alle Klassen, die einen ausführbaren Datenbankbefehl repräsentieren. Jede Klasse, die dieses Interface implementiert, stellt garantiert eine execute()-Methode bereit, über die der jeweilige Befehl gegen den MySQL-Server abgesetzt werden kann.
Die X DevAPI ist eine moderne, dokumentenorientierte API für MySQL, die sowohl relationale Tabellen als auch JSON-Dokument-Collections unterstützt. Typische Implementierungen von Executable sind beispielsweise Klassen wie CollectionFind, CollectionAdd, CollectionModify, CollectionRemove, TableSelect, TableInsert, TableUpdate und TableDelete.
Das Interface ermöglicht ein einheitliches, fluent-artiges API-Design: Methoden wie fields(), where(), sort() oder limit() geben das jeweilige Befehlsobjekt zurück, am Ende der Kette wird mit execute() der Befehl abgeschickt und ein Ergebnis-Objekt (z. B. Result oder DocResult) zurückgegeben.
Eigene Klassen können dieses Interface implementieren, um benutzerdefinierte, ausführbare Operationen in das X DevAPI-Ökosystem zu integrieren und Typkompatibilität mit bestehendem Code sicherzustellen.
Beispiele
Dokumente in einer Collection suchen und ausführen
<?php
// Verbindung zur MySQL X DevAPI herstellen
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('meine_datenbank');
$collection = $schema->getCollection('benutzer');
// CollectionFind implementiert Executable
// execute() ist die finale Methode der Fluent-Chain
$result = $collection
->find('age > :minAge')
->bind(['minAge' => 18])
->sort('name ASC')
->limit(10)
->execute(); // Executable::execute()
foreach ($result->fetchAll() as $doc) {
echo $doc['name'] . PHP_EOL;
}
$session->close();
Typprüfung per Interface – execute() polymorph aufrufen
<?php
/**
* Führt eine beliebige X DevAPI-Operation aus,
* sofern sie Executable implementiert.
*/
function ausfuehren(mysql_xdevapi\Executable $befehl): mysql_xdevapi\Result
{
return $befehl->execute();
}
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('shop');
// CollectionAdd implementiert ebenfalls Executable
$addBefehl = $schema->getCollection('produkte')->add([
['name' => 'Laptop', 'preis' => 999.99],
['name' => 'Maus', 'preis' => 29.99],
]);
$result = ausfuehren($addBefehl);
echo 'Eingefügt: ' . $result->getAffectedItemsCount() . ' Dokument(e)' . PHP_EOL;
$session->close();
// Wichtig · Fallstricke
Voraussetzungen: Das Interface steht nur zur Verfügung, wenn die PECL-Erweiterung mysql_xdevapi installiert und geladen ist. Die Erweiterung erfordert MySQL Server 5.7.12+ mit aktiviertem X Plugin sowie die libmysqlxclient-Bibliothek.
Sicherheit: Beim Zusammensetzen von Abfragebedingungen unbedingt parametrisierte Ausdrücke über bind() verwenden, um Injection-Angriffe zu verhindern. Direkte String-Interpolation in find()- oder where()-Ausdrücken ist zu vermeiden.
Fehlerbehandlung: execute() kann eine mysql_xdevapi\Exception werfen, wenn der Server nicht erreichbar ist oder die Abfrage syntaktisch fehlerhaft ist. Der Aufruf sollte daher in einem try/catch-Block erfolgen.