Start · Sprachen · PHP · Referenz · mysql_field_table

mysql_field_table

Funktion

Gibt den Namen der Tabelle zurück, zu der ein bestimmtes Feld im <code>mysql_query()</code>-Ergebnis gehört.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_field_table(resource $result, int $field_offset): string|false

Beschreibung

mysql_field_table() ermittelt den Tabellennamen, aus dem ein Feld in einem MySQL-Abfrageergebnis stammt. Dies ist besonders nützlich bei JOIN-Abfragen, bei denen Felder aus mehreren Tabellen kombiniert werden und man den Ursprung eines bestimmten Feldes identifizieren möchte.

Der Parameter field_offset ist nullbasiert, d. h. das erste Feld hat den Offset 0, das zweite 1 usw. Die Funktion gibt den Tabellennamen als Zeichenkette zurück oder false bei einem Fehler.

Wichtig: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli oder PDO verwendet werden. Bestehender Code sollte entsprechend migriert werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Das MySQL-Ergebnis-Ressource-Handle, das von mysql_query() zurückgegeben wurde.
$field_offset Pflicht int Der nullbasierte numerische Offset des Feldes im Ergebnis-Set. 0 bezeichnet das erste Feld.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Namen der Tabelle als Zeichenkette zurück, zu der das angegebene Feld gehört. Bei einem Fehler (z. B. ungültiger Offset oder ungültige Ressource) wird false zurückgegeben.

Beispiele

Tabellenname eines Feldes aus einer einfachen Abfrage ermitteln

<?php
$link = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $link);

$result = mysql_query('SELECT id, name FROM kunden', $link);

// Tabellenname für das erste Feld (Offset 0) ermitteln
$tabelle = mysql_field_table($result, 0);
echo 'Feld 0 stammt aus Tabelle: ' . $tabelle . PHP_EOL;

// Tabellenname für das zweite Feld (Offset 1) ermitteln
$tabelle = mysql_field_table($result, 1);
echo 'Feld 1 stammt aus Tabelle: ' . $tabelle . PHP_EOL;

mysql_free_result($result);
mysql_close($link);
?>
Feld 0 stammt aus Tabelle: kunden Feld 1 stammt aus Tabelle: kunden

Tabellenherkunft bei JOIN-Abfragen erkennen

<?php
$link = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $link);

$sql = 'SELECT k.id, k.name, b.betrag
        FROM kunden k
        JOIN bestellungen b ON k.id = b.kunden_id
        LIMIT 1';
$result = mysql_query($sql, $link);

$anzahl = mysql_num_fields($result);
for ($i = 0; $i < $anzahl; $i++) {
    $feldname  = mysql_field_name($result, $i);
    $tabelname = mysql_field_table($result, $i);
    echo "Feld '{$feldname}' kommt aus Tabelle '{$tabelname}'" . PHP_EOL;
}

mysql_free_result($result);
mysql_close($link);
?>
Feld 'id' kommt aus Tabelle 'kunden' Feld 'name' kommt aus Tabelle 'kunden' Feld 'betrag' kommt aus Tabelle 'bestellungen'

// Wichtig · Fallstricke

Veraltet und entfernt: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als deprecated markiert, in PHP 5.6.0 erzeugt sie E_DEPRECATED-Warnungen und ist seit PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, wird auf PHP 7+ einen fatalen Fehler erzeugen.

Als moderne Alternativen stehen mysqli_fetch_field() (gibt ein Objekt mit der Eigenschaft table zurück) oder das PDO-Statement-Attribut PDOStatement::getColumnMeta() zur Verfügung.

Bei Aliasnamen in SQL-Abfragen (z. B. SELECT k.name AS kundenname) gibt mysql_field_table() weiterhin den echten Tabellennamen zurück, nicht den Alias-Namen des Feldes.