Signatur
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.';
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.';
// 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.