Start · Sprachen · PHP · Referenz · mysql_xdevapi\Session

mysql_xdevapi\Session

Klasse

Repräsentiert eine Sitzung mit einem MySQL-Server über die X DevAPI und ermöglicht Datenbankoperationen über das X Protocol.

seit PHP 7.1.0 Kategorie: db

Signatur

class mysql_xdevapi\Session

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() und getDefaultSchema()
  • 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();
information_schema meine_datenbank mysql performance_schema sys

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();
}
Transaktion erfolgreich abgeschlossen.

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();
MySQL-Version: 8.0.35 Schema erstellt.

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