Signatur
Beschreibung
Die Klasse mysql_xdevapi\Session ist das zentrale Objekt für die Kommunikation mit einem MySQL-Server über die X DevAPI. Sie wird typischerweise über die Funktion mysql_xdevapi\getSession() erstellt und ermöglicht den Zugriff auf Datenbanken, Schemata, Transaktionen sowie die Ausführung von SQL-Anweisungen.
Im Gegensatz zur klassischen mysqli- oder PDO-Schnittstelle nutzt die X DevAPI das X Protocol (Port 33060) und unterstützt sowohl relationale als auch dokumentenbasierte NoSQL-Operationen. Dies macht sie besonders geeignet für moderne MySQL-Anwendungen, die Document Store und CRUD-Operationen kombinieren wollen.
Über ein Session-Objekt können Schemata aufgelistet, erstellt oder entfernt werden. Außerdem lassen sich SQL-Statements direkt ausführen und Transaktionen steuern (Start, Commit, Rollback, Savepoints). Das Objekt kapselt die gesamte Verbindungslogik und stellt eine objektorientierte Schnittstelle zur Verfügung.
- Datenbankzugriff: Zugriff auf Schemata via
getSchema()undgetDefaultSchema() - Transaktionen:
startTransaction(),commit(),rollback(),setSavepoint(),releaseSavepoint(),rollbackTo() - SQL-Ausführung: Beliebige SQL-Anweisungen über
sql() - Verbindungsmanagement:
close()zum expliziten Schließen der Verbindung
Beispiele
Verbindung aufbauen und Schema auswählen
<?php
// Verbindung über X DevAPI herstellen (Port 33060)
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost:33060');
// Verfügbare Schemata ausgeben
$schemas = $session->getSchemas();
foreach ($schemas as $schema) {
echo $schema->getName() . PHP_EOL;
}
// Auf ein bestimmtes Schema zugreifen
$schema = $session->getSchema('meine_datenbank');
// Verbindung schließen
$session->close();
Transaktion mit Savepoint verwenden
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost:33060');
$schema = $session->getSchema('shop');
$collection = $schema->getCollection('bestellungen');
// Transaktion starten
$session->startTransaction();
try {
$collection->add(['artikel' => 'Laptop', 'preis' => 999.99])->execute();
// Savepoint setzen
$session->setSavepoint('nach_laptop');
$collection->add(['artikel' => 'Maus', 'preis' => 29.99])->execute();
// Nur bis zum Savepoint zurückrollen (Laptop bleibt)
$session->rollbackTo('nach_laptop');
// Transaktion abschließen
$session->commit();
echo 'Transaktion erfolgreich abgeschlossen.';
} catch (Exception $e) {
$session->rollback();
echo 'Fehler: ' . $e->getMessage();
} finally {
$session->close();
}
Direktes SQL über die Session ausführen
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost:33060');
// SQL-Statement ausführen
$result = $session->sql('SELECT VERSION() AS version')->execute();
$row = $result->fetchOne();
echo 'MySQL-Version: ' . $row['version'] . PHP_EOL;
// Neues Schema anlegen
$session->sql('CREATE DATABASE IF NOT EXISTS neue_db')->execute();
echo 'Schema erstellt.' . PHP_EOL;
$session->close();
// Wichtig · Fallstricke
Voraussetzungen: Die X DevAPI-Erweiterung (mysql_xdevapi) muss installiert und aktiviert sein. Sie ist nicht in der Standard-PHP-Distribution enthalten und muss über PECL installiert werden (pecl install mysql_xdevapi). Außerdem muss der MySQL-Server das X Plugin aktiviert haben (standardmäßig ab MySQL 5.7.12 aktiv).
Port: Das X Protocol verwendet standardmäßig Port 33060, nicht den klassischen MySQL-Port 3306. Achte darauf, dass dieser Port in der Firewall freigegeben ist.
Verbindungs-URI: Die Verbindung wird über eine URI im Format mysqlx://benutzer:passwort@host:port hergestellt. Passwörter in der URI sollten URL-kodiert werden, wenn sie Sonderzeichen enthalten.
Sicherheit: Für Produktivumgebungen sollte TLS/SSL verwendet werden. Die URI kann um SSL-Optionen erweitert werden, z. B. mysqlx://user:pass@host?ssl-ca=/pfad/zur/ca.pem. Vermeide es, Zugangsdaten direkt im Quellcode zu hinterlegen — nutze stattdessen Umgebungsvariablen oder Konfigurationsdateien.