Start · Sprachen · PHP · Referenz · getSession

getSession

Funktion

Baut eine Verbindung zu einem MySQL-Server auf und gibt ein <code>Session</code>-Objekt zurück.

Kategorie: db

Signatur

getSession(uri: string, options: array = []): MySQL\Session

Beschreibung

getSession() ist die zentrale Funktion des MySQL X DevAPI (über die PHP-Erweiterung mysql_xdevapi) und stellt eine Verbindung zu einem MySQL-Server über das X Protocol her. Sie gibt ein MySQL\Session-Objekt zurück, mit dem Datenbankoperationen ausgeführt werden können.

Die Verbindung wird über einen URI-String spezifiziert, der Benutzername, Passwort, Hostname, Port und Datenbankname enthalten kann. Das X Protocol verwendet standardmäßig Port 33060 statt des klassischen MySQL-Ports 3306. Im Gegensatz zur klassischen mysqli- oder PDO-Verbindung unterstützt die X DevAPI auch dokumentenorientierte Zugriffsmuster (NoSQL-ähnlich) neben SQL.

Über das optionale options-Array können zusätzliche Verbindungsparameter wie SSL/TLS-Einstellungen oder Verbindungs-Timeouts übergeben werden. Die Session-Objekte sind zustandsbehaftet und sollten nach Verwendung ordnungsgemäß geschlossen werden.

Diese Funktion eignet sich besonders für Anwendungen, die die modernen Features von MySQL 8+ (z. B. JSON-Dokument-Stores, asynchrone Abfragen) nutzen möchten und die X DevAPI einsetzen wollen.

Parameter

Name Typ Default Beschreibung
$uri Pflicht string Verbindungs-URI im Format mysqlx://benutzer:passwort@host:port/datenbankname. Der Standardport für das X Protocol ist 33060.
$options array [] Optionales Array mit zusätzlichen Verbindungsoptionen, z. B. SSL/TLS-Konfiguration (ssl-ca, ssl-cert, ssl-key) oder Authentifizierungsparameter.

Rückgabewert

Typ
MySQL\Session
Beschreibung
Gibt ein MySQL\Session-Objekt zurück, über das SQL-Abfragen und X DevAPI-Operationen ausgeführt werden können. Bei einem Verbindungsfehler wird eine Exception geworfen.

Beispiele

Einfache Verbindung zu einem MySQL-Server

<?php
// Verbindung über X DevAPI herstellen
$uri = 'mysqlx://root:geheimesPasswort@localhost:33060/meineDatenbank';

try {
    $session = getSession($uri);
    echo "Verbindung erfolgreich hergestellt!\n";

    // SQL-Abfrage ausführen
    $result = $session->sql('SELECT VERSION() AS version')->execute();
    $row = $result->fetchOne();
    echo "MySQL-Version: " . $row['version'] . "\n";

    // Session schließen
    $session->close();
} catch (Exception $e) {
    echo "Fehler: " . $e->getMessage() . "\n";
}
Verbindung erfolgreich hergestellt! MySQL-Version: 8.0.33

Verbindung mit SSL und Dokumenten-Store

<?php
// Verbindung mit SSL-Optionen
$uri = 'mysqlx://dbuser:sicheresPasswort@db.example.com:33060/shopDB';
$options = [
    'ssl-ca'   => '/etc/ssl/certs/ca-cert.pem',
    'ssl-cert' => '/etc/ssl/certs/client-cert.pem',
    'ssl-key'  => '/etc/ssl/private/client-key.pem',
];

try {
    $session = getSession($uri, $options);

    // Zugriff auf einen JSON-Dokument-Store (Collection)
    $schema     = $session->getSchema('shopDB');
    $collection = $schema->getCollection('produkte');

    // Dokument einfügen
    $collection->add(['name' => 'Laptop', 'preis' => 999.99])->execute();
    echo "Dokument erfolgreich hinzugefügt.\n";

    // Dokumente suchen
    $docs = $collection->find('preis > 500')->execute();
    foreach ($docs->fetchAll() as $doc) {
        echo $doc['name'] . ': ' . $doc['preis'] . ' EUR\n';
    }

    $session->close();
} catch (Exception $e) {
    echo "Fehler: " . $e->getMessage() . "\n";
}
Dokument erfolgreich hinzugefügt. Laptop: 999.99 EUR

// Wichtig · Fallstricke

Sicherheit: Vermeiden Sie es, Zugangsdaten direkt im Quellcode zu hinterlegen. Nutzen Sie Umgebungsvariablen oder Konfigurationsdateien außerhalb des Webroot-Verzeichnisses, um sensible Verbindungsdaten zu schützen.

X Protocol: Diese Funktion gehört zur Erweiterung mysql_xdevapi und kommuniziert über das MySQL X Protocol (Port 33060). Sie ist nicht Teil von mysqli oder PDO. Stellen Sie sicher, dass die Erweiterung in der php.ini geladen ist (extension=mysql_xdevapi) und MySQL 5.7.12+ bzw. MySQL 8 mit aktiviertem X Plugin läuft.

Fehlerbehandlung: Bei fehlgeschlagener Verbindung wirft getSession() eine Exception. Umschließen Sie Aufrufe stets mit einem try/catch-Block.