Start · Sprachen · PHP · Referenz · mysql_xdevapi\Executable

mysql_xdevapi\Executable

Interface

Interface für ausführbare X DevAPI-Operationen, das eine einheitliche <code>execute()</code>-Methode für alle ausführbaren Datenbankbefehle definiert.

seit PHP 7.1.0 Kategorie: db

Signatur

interface mysql_xdevapi\Executable

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();
// Gibt die Namen aller Benutzer über 18 aus, z. B.: // Anna // Max // Sophie

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();
Eingefügt: 2 Dokument(e)

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