Signatur
Beschreibung
Die Klasse mysql_xdevapi\Schema ist Teil der MySQL X DevAPI, die mit der mysql_xdevapi-Erweiterung für PHP bereitgestellt wird. Eine Schema-Instanz entspricht einer einzelnen MySQL-Datenbank und dient als Einstiegspunkt, um auf die darin enthaltenen Objekte wie Collections, Tabellen und Views zuzugreifen.
Objekte dieser Klasse werden typischerweise nicht direkt instantiiert, sondern über die Methode getSchema() eines Session-Objekts bezogen. Über das Schema-Objekt kann man dann Collections für dokumentenorientierte Operationen erstellen oder vorhandene Tabellen für SQL-basierte Operationen abrufen.
Die Klasse unterstützt sowohl das relationale Datenmodell (Tabellen/Views) als auch das dokumentenorientierte Modell (Collections), da das X-Protokoll beides vereint. Typische Methoden sind unter anderem createCollection(), getCollection(), getCollections(), getTable(), getTables() sowie getName() und existsInDatabase().
Wichtig: Die mysql_xdevapi-Erweiterung erfordert einen MySQL-Server ab Version 8.0 mit aktiviertem X-Plugin (Port 33060) und ist nicht mit der veralteten mysql_*- oder mysqli-API verwandt.
Beispiele
Schema-Objekt abrufen und Collections auflisten
<?php
// Verbindung zur MySQL-Datenbank über X-Protokoll herstellen
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost:33060');
// Schema (Datenbank) holen
$schema = $session->getSchema('meine_datenbank');
echo "Schema-Name: " . $schema->getName() . PHP_EOL;
echo "Existiert in DB: " . ($schema->existsInDatabase() ? 'Ja' : 'Nein') . PHP_EOL;
// Alle Collections im Schema auflisten
$collections = $schema->getCollections();
foreach ($collections as $collection) {
echo "Collection: " . $collection->getName() . PHP_EOL;
}
Collection erstellen und Dokument einfügen
<?php
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost:33060');
$schema = $session->getSchema('shop');
// Collection anlegen (falls nicht vorhanden)
try {
$collection = $schema->createCollection('artikel');
} catch (Exception $e) {
// Collection existiert bereits — vorhandene verwenden
$collection = $schema->getCollection('artikel');
}
// Dokument einfügen
$collection->add([
'name' => 'Laptop',
'preis' => 999.99,
'lager' => 42
])->execute();
echo "Artikel erfolgreich hinzugefügt." . PHP_EOL;
// Alle Artikel abrufen
$result = $collection->find()->execute();
foreach ($result->fetchAll() as $doc) {
echo $doc['name'] . " - " . $doc['preis'] . " EUR" . PHP_EOL;
}
Auf eine relationale Tabelle zugreifen
<?php
$session = mysql_xdevapi\getSession('mysqlx://root:geheim@localhost:33060');
$schema = $session->getSchema('firma');
// Tabelle abrufen
$tabelle = $schema->getTable('mitarbeiter');
// Zeilen selektieren
$result = $tabelle->select('name', 'abteilung')
->where('abteilung = :abt')
->bind(['abt' => 'Entwicklung'])
->execute();
foreach ($result->fetchAll() as $zeile) {
echo $zeile['name'] . " (" . $zeile['abteilung'] . ")" . PHP_EOL;
}
// Wichtig · Fallstricke
Voraussetzungen: Die mysql_xdevapi-Erweiterung muss in der php.ini aktiviert sein (extension=mysql_xdevapi). Der MySQL-Server benötigt das X-Plugin (ab MySQL 8.0 standardmäßig aktiv, Port 33060).
- Nicht zu verwechseln mit
mysqlioder PDO: Das X DevAPI nutzt ein eigenes Protokoll und eigene Objekte. - Sicherheit: Verbindungspasswörter sollten niemals hart im Quellcode stehen; Umgebungsvariablen oder Konfigurationsdateien außerhalb des Web-Roots sind zu bevorzugen.
- Die Erweiterung befindet sich noch in einem frühen Entwicklungsstand; die API kann sich in künftigen PHP- oder MySQL-Versionen ändern. Prüfe die Verfügbarkeit mit
extension_loaded('mysql_xdevapi'). - Beim Anlegen von Collections mit
createCollection()wird intern eine MySQL-Tabelle mit einer JSON-Spalte erstellt – das Mischen von relationalem und dokumentenorientiertem Zugriff auf dieselbe Tabelle ist möglich, aber mit Vorsicht zu genießen.