Signatur
Beschreibung
Die Klasse mysql_xdevapi\Table ist Teil der MySQL X DevAPI-Erweiterung und stellt eine objektorientierte Schnittstelle für den Zugriff auf relationale Tabellen in einer MySQL-Datenbank bereit. Sie wird typischerweise über die Methode getTable() eines Schema-Objekts bezogen und erlaubt das Ausführen von INSERT-, SELECT-, UPDATE- und DELETE-Operationen ohne direkte SQL-Strings.
Im Gegensatz zu mysql_xdevapi\Collection, die für dokumentenorientierte JSON-Daten ausgelegt ist, arbeitet Table mit klassischen relationalen Tabellenstrukturen. Die Methoden geben jeweils Builder-Objekte zurück (z. B. TableInsert, TableSelect, TableUpdate, TableDelete), die eine Fluent-Interface-Syntax (Method-Chaining) unterstützen.
Die Klasse eignet sich besonders dann, wenn eine Anwendung auf bestehende relationale Schemata zugreift und gleichzeitig von den Vorteilen der X DevAPI (asynchrone Ausführung, verbesserte Sicherheit durch Prepared-Statement-ähnliches Binding) profitieren soll. Sie ist keine Unterklasse von PDO oder ähnlichen Abstraktionen, sondern ein eigenständiges Objekt im X-Protocol-Ökosystem.
Objekte dieser Klasse werden nicht direkt instanziiert, sondern ausschließlich über Schema::getTable() erzeugt. Alle Schreiboperationen laufen über das X-Protocol auf Port 33060 ab und erfordern einen entsprechend konfigurierten MySQL-Server (ab Version 5.7.12 mit aktiviertem X Plugin).
Beispiele
Datensätze in eine Tabelle einfügen und abfragen
<?php
// Verbindung über X DevAPI herstellen
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost');
$schema = $session->getSchema('meine_datenbank');
// Table-Objekt abrufen
$tabelle = $schema->getTable('benutzer');
// Zeile einfügen
$tabelle->insert(['name', 'email'])
->values(['Max Mustermann', 'max@example.com'])
->execute();
// Zeilen abfragen
$ergebnis = $tabelle->select(['name', 'email'])
->where('name = :name')
->bind(['name' => 'Max Mustermann'])
->execute();
foreach ($ergebnis->fetchAll() as $zeile) {
echo $zeile['name'] . ' — ' . $zeile['email'] . PHP_EOL;
}
$session->close();
?>
Datensatz aktualisieren und löschen
<?php
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost');
$tabelle = $session->getSchema('meine_datenbank')->getTable('benutzer');
// Datensatz aktualisieren
$tabelle->update()
->set('email', 'neu@example.com')
->where('name = :name')
->bind(['name' => 'Max Mustermann'])
->execute();
// Prüfen, ob die Tabelle existiert
if ($tabelle->existsInDatabase()) {
echo 'Tabelle existiert.' . PHP_EOL;
}
// Datensatz löschen
$tabelle->delete()
->where('name = :name')
->bind(['name' => 'Max Mustermann'])
->execute();
$session->close();
?>
// Wichtig · Fallstricke
Sicherheit: Obwohl die X DevAPI intern Parameterisierung verwendet, sollten Benutzereingaben stets über die bind()-Methode übergeben werden, um SQL-Injection-Risiken zu vermeiden. Werte niemals direkt als Strings in where()-Ausdrücke einfügen.
Voraussetzungen: Die Erweiterung mysql_xdevapi muss in der php.ini aktiviert sein (extension=mysql_xdevapi). Der MySQL-Server muss das X Plugin aktiv haben; standardmäßig lauscht es auf Port 33060.
Deprecation/Verfügbarkeit: Die mysql_xdevapi-Erweiterung ist als PECL-Paket verfügbar und nicht im PHP-Core enthalten. Sie befindet sich noch in aktiver Entwicklung; API-Änderungen zwischen Versionen sind möglich. Für produktive Umgebungen sollte die aktuelle PECL-Version eingesetzt werden.
Kein direktes Instanziieren: Objekte der Klasse Table dürfen nicht mit new erzeugt werden. Der einzig korrekte Weg ist der Aufruf von Schema::getTable('tabellenname').