Start · Sprachen · PHP · Referenz · mysql_field_len

mysql_field_len

Funktion

Gibt die Länge (maximale Byte-Größe) des angegebenen Feldes eines MySQL-Ergebnisses zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_field_len(resource $result, int $field_offset): int|false

Beschreibung

mysql_field_len() liefert die maximale Länge (in Bytes) eines bestimmten Feldes aus einem MySQL-Abfrageergebnis. Der Rückgabewert entspricht der Felddeklaration in der Datenbank, also zum Beispiel 255 bei einem VARCHAR(255) oder 11 bei einem INT(11). Er beschreibt nicht die tatsächliche Länge der gespeicherten Daten, sondern die maximale Kapazität laut Spaltendefinition.

Die Funktion ist besonders nützlich, wenn man zur Laufzeit Metadaten über Tabellenspalten ermitteln möchte, ohne eine gesonderte DESCRIBE-Abfrage auszuführen – etwa um Eingabefelder in einem Formular auf die korrekte Maximallänge zu begrenzen oder automatisch Validierungsregeln zu generieren.

Achtung: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet markiert und in PHP 7.0.0 vollständig entfernt. Neuer Code sollte stattdessen mysqli oder PDO mit deren Metadaten-Methoden (mysqli_fetch_field(), PDOStatement::getColumnMeta()) verwenden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Das MySQL-Ergebnis-Resource-Handle, das zuvor von mysql_query() zurückgegeben wurde.
$field_offset Pflicht int Der nullbasierte Index der Spalte im Ergebnis-Set, für die die Länge ermittelt werden soll. Der erste Feldindex ist 0.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die maximale Länge des Feldes in Bytes als int zurück. Bei einem Fehler (z. B. ungültiger field_offset) wird false zurückgegeben.

Beispiele

Feldlänge einer Tabellenspalte ermitteln

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

$result = mysql_query('SELECT name, alter FROM benutzer LIMIT 1', $link);

if ($result) {
    // Länge der ersten Spalte (name) ausgeben
    $len = mysql_field_len($result, 0);
    echo 'Maximale Länge von Spalte 0 (name): ' . $len . ' Bytes' . PHP_EOL;

    // Länge der zweiten Spalte (alter) ausgeben
    $len2 = mysql_field_len($result, 1);
    echo 'Maximale Länge von Spalte 1 (alter): ' . $len2 . ' Bytes' . PHP_EOL;

    mysql_free_result($result);
}

mysql_close($link);
?>
Maximale Länge von Spalte 0 (name): 255 Bytes Maximale Länge von Spalte 1 (alter): 11 Bytes

Alle Feldlängen eines Ergebnisses auflisten

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

$result = mysql_query('SELECT * FROM produkte LIMIT 1', $link);

if ($result) {
    $num_fields = mysql_num_fields($result);
    echo '<ul>';
    for ($i = 0; $i < $num_fields; $i++) {
        $name = mysql_field_name($result, $i);
        $len  = mysql_field_len($result, $i);
        echo '<li><strong>' . htmlspecialchars($name) . '</strong>: max. ' . $len . ' Bytes</li>';
    }
    echo '</ul>';
    mysql_free_result($result);
}

mysql_close($link);
?>
<ul><li><strong>id</strong>: max. 11 Bytes</li><li><strong>bezeichnung</strong>: max. 255 Bytes</li><li><strong>preis</strong>: max. 8 Bytes</li></ul>

// Wichtig · Fallstricke

Veraltet und entfernt: Die mysql_*-Erweiterung (ext/mysql) wurde in PHP 5.5.0 offiziell als deprecated markiert und in PHP 7.0.0 vollständig entfernt. Der Einsatz in neuem Code ist nicht mehr möglich. Migrieren Sie auf mysqli_fetch_field() (Eigenschaft $field->length) oder PDOStatement::getColumnMeta().

Beachten Sie, dass die zurückgegebene Länge die Bytelänge ist, nicht die Zeichenanzahl. Bei Multi-Byte-Zeichensätzen (z. B. UTF-8) kann ein VARCHAR(100) intern bis zu 300 Bytes belegen – mysql_field_len() gibt in diesem Fall 300 zurück.