Start · Sprachen · PHP · Referenz · mysql_xdevapi\Table

mysql_xdevapi\Table

Klasse

Repräsentiert eine relationale Tabelle in einer MySQL-Datenbank und ermöglicht den Zugriff über <code>INSERT</code>, <code>SELECT</code>, <code>UPDATE</code> und <code>DELETE</code>-Operationen.

seit PHP 7.4.0 Kategorie: db

Signatur

class mysql_xdevapi\Table

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();
?>
Max Mustermann — max@example.com

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();
?>
Tabelle existiert.

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