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