Start · Sprachen · PHP · Referenz · mysql_xdevapi\Expression

mysql_xdevapi\Expression

Klasse

Repräsentiert einen X DevAPI-Ausdruck, der rohe Ausdrucks-Strings in CRUD-Operationen der MySQL X DevAPI vor automatischer Parametrisierung schützt.

seit PHP 8.0.0 Kategorie: db

Signatur

class mysql_xdevapi\Expression

Beschreibung

Die Klasse mysql_xdevapi\Expression gehört zur MySQL X DevAPI-Erweiterung und dient dazu, einen String explizit als Ausdruck (Expression) zu kennzeichnen, anstatt ihn als literalen Wert zu behandeln. Dies ist notwendig, wenn in CRUD-Methoden wie add(), set() oder modify() ein Datenbankausdruck (z. B. eine Funktion, ein Berechnungsausdruck oder ein Spaltenname) anstelle eines einfachen Wertes übergeben werden soll.

Ohne diese Klasse würde die X DevAPI den übergebenen String als parametrisierten Literalwert behandeln. Durch das Einwickeln in ein Expression-Objekt wird der Inhalt ungeparst an den MySQL-Server weitergegeben und dort als SQL/X DevAPI-Ausdruck interpretiert.

Typische Anwendungsfälle sind das Einfügen berechneter Werte, das Inkrementieren von Feldern ($.counter + 1), die Verwendung von MySQL-Funktionen wie NOW(), oder das Setzen von JSON-Feldpfaden auf Basis anderer Felder innerhalb eines Dokuments.

Achtung: Da der Ausdrucks-String unverändert an den Server weitergegeben wird, muss bei der Verwendung von Benutzereingaben besondere Sorgfalt walten, um Injection-Angriffe zu verhindern. Benutzereingaben sollten niemals direkt in einen Expression-Ausdruck eingebettet werden.

Parameter

Name Typ Default Beschreibung
$expression Pflicht string Der Ausdrucks-String, der als X DevAPI-Ausdruck interpretiert werden soll, z. B. '$.counter + 1' oder 'NOW()'.

Beispiele

Feld per Ausdruck inkrementieren

<?php
// Verbindung zur MySQL-Datenbank über X DevAPI
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('users');

// Dokument einfügen
$collection->add(['name' => 'Alice', 'counter' => 0])->execute();

// Counter-Feld mittels Ausdruck inkrementieren (kein Literalwert!)
$collection
    ->modify('name = :name')
    ->set('counter', new mysql_xdevapi\Expression('$.counter + 1'))
    ->bind(['name' => 'Alice'])
    ->execute();

echo 'Counter wurde per Ausdruck erhöht.';
Counter wurde per Ausdruck erhöht.

Datumsstempel per MySQL-Funktion setzen

<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost');
$schema = $session->getSchema('mydb');
$collection = $schema->getCollection('events');

// 'created_at' auf den aktuellen Zeitstempel des Servers setzen
$collection
    ->add([
        'title'      => 'Konferenz',
        'created_at' => new mysql_xdevapi\Expression('NOW()')
    ])
    ->execute();

echo 'Dokument mit Server-Zeitstempel angelegt.';
Dokument mit Server-Zeitstempel angelegt.

// Wichtig · Fallstricke

Sicherheitshinweis: Der Ausdrucks-String wird nicht parametrisiert oder escaped, sondern direkt an den MySQL-Server übermittelt. Benutzereingaben dürfen niemals ungeprüft in ein Expression-Objekt eingebettet werden, da dies zu Injection-Angriffen führen kann. Verwende für variable Werte stets die bind()-Methode in Kombination mit Platzhaltern.

Die Klasse ist Teil der mysql_xdevapi-Erweiterung, die als PECL-Paket installiert werden muss (pecl install mysql_xdevapi). Sie setzt PHP 7.1+ und die MySQL Connector/C++-Bibliothek voraus.