Signatur
Beschreibung
mysql_xdevapi\FieldMetadata ist eine Klasse der MySQL X DevAPI-Erweiterung für PHP und kapselt alle Metainformationen zu einer einzelnen Spalte (einem Feld) eines Abfrageergebnisses. Sie wird nicht direkt instanziiert, sondern von Ergebnismengen-Objekten wie mysql_xdevapi\Result oder mysql_xdevapi\RowResult über deren Methoden zur Verfügung gestellt.
Typischerweise wird FieldMetadata verwendet, um zur Laufzeit zu ermitteln, welchen Datentyp eine Spalte hat, wie sie heißt, aus welcher Tabelle und welchem Schema sie stammt, oder welche Zeichenkodierung für sie gilt. Dies ist besonders nützlich, wenn generische Datenbank-Utilities, Debugging-Werkzeuge oder ORM-ähnliche Abstraktionen gebaut werden, die dynamisch auf Spalteninformationen reagieren müssen.
Die Eigenschaften der Klasse sind schreibgeschützt und werden direkt nach dem Abruf einer Abfrage befüllt. Sie enthalten unter anderem den Spaltennamen, den Originalnamen (alias-unabhängig), den Tabellennamen, das Schema, den Katalog sowie numerische Typ- und Flag-Informationen gemäß dem MySQL-X-Protokoll.
name– Der (ggf. aliasierte) Spaltenname.original_name– Der ursprüngliche Spaltenname ohne Alias.table– Name der Tabelle (oder des Ausdrucks), aus der die Spalte stammt.original_table– Ursprünglicher Tabellenname.schema– Name des Schemas (der Datenbank).catalog– Name des Katalogs.collation_name– Zeichensatz-Kollation der Spalte.character_set_name– Zeichensatzname der Spalte.length– Maximale Länge des Felds.fractional_digits– Anzahl der Dezimalstellen bei numerischen Typen.type– Numerischer Typ-Bezeichner.flags– Bit-Flags mit zusätzlichen Typinformationen (z. B. UNSIGNED, NOT NULL).
Beispiele
Feldmetadaten eines SELECT-Ergebnisses ausgeben
<?php
// Verbindung zur MySQL-Datenbank über X Protocol herstellen
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost/testdb');
$schema = $session->getSchema('testdb');
$collection = $schema->getTable('users');
// SQL-Abfrage über die Session ausführen
$result = $session->sql('SELECT id, name AS username, email FROM users LIMIT 1')->execute();
// Feldmetadaten abrufen
$columns = $result->getColumns();
foreach ($columns as $column) {
/** @var mysql_xdevapi\FieldMetadata $column */
echo 'Name: ' . $column->name . PHP_EOL;
echo 'Original Name: ' . $column->original_name . PHP_EOL;
echo 'Tabelle: ' . $column->table . PHP_EOL;
echo 'Original Tabelle:' . $column->original_table . PHP_EOL;
echo 'Schema: ' . $column->schema . PHP_EOL;
echo 'Typ: ' . $column->type . PHP_EOL;
echo 'Länge: ' . $column->length . PHP_EOL;
echo 'Flags: ' . $column->flags . PHP_EOL;
echo '---' . PHP_EOL;
}
$session->close();
Typ-Flag auf UNSIGNED prüfen
<?php
$session = mysql_xdevapi\getSession('mysqlx://user:password@localhost/testdb');
$result = $session->sql('SELECT id, punkte FROM users LIMIT 1')->execute();
$columns = $result->getColumns();
foreach ($columns as $column) {
// Flag-Bit 32 steht für UNSIGNED im MySQL X Protocol
$isUnsigned = ($column->flags & 32) !== 0;
echo $column->name . ' ist ' . ($isUnsigned ? 'UNSIGNED' : 'SIGNED') . PHP_EOL;
}
$session->close();
// Wichtig · Fallstricke
Verfügbarkeit: Die mysql_xdevapi-Erweiterung muss explizit installiert und aktiviert sein (PECL-Paket mysql_xdevapi). Sie ist nicht standardmäßig in PHP enthalten und erfordert eine MySQL-Server-Version mit aktiviertem X Plugin (Standard ab MySQL 5.7.12).
Instanziierung: FieldMetadata-Objekte werden ausschließlich intern durch die Erweiterung erzeugt und über Methoden wie getColumns() an den Aufrufer übergeben. Ein direktes new mysql_xdevapi\FieldMetadata() ist nicht vorgesehen.
Flag-Interpretation: Die flags-Eigenschaft enthält einen Bit-Vektor gemäß MySQL X Protocol Specification. Die Bedeutung der einzelnen Bits kann sich zwischen MySQL-Versionen unterscheiden. Für robuste Anwendungen sollte die offizielle Dokumentation des X Protocol konsultiert werden.
Kollation/Zeichensatz: Bei Binär-Spalten ist collation_name häufig binary. Für Textfelder ohne explizite Kollation wird die Datenbank- bzw. Server-Standardkollation angegeben.