Signatur
Beschreibung
mysql_fetch_lengths() gibt die Byte-Längen der Feldwerte zurück, die beim letzten Aufruf von mysql_fetch_row(), mysql_fetch_assoc() oder mysql_fetch_array() aus dem Ergebnis-Ressource gelesen wurden. Das zurückgegebene Array ist numerisch indiziert und enthält für jede Spalte die tatsächliche Länge des gelieferten Wertes als Integer.
Die Funktion ist besonders nützlich, wenn man prüfen möchte, ob ein Feld NULL enthält oder einen leeren String – beide liefern beim Lesen den Wert '', lassen sich aber anhand der Länge (0) bzw. des tatsächlichen NULL-Status unterscheiden. Außerdem eignet sie sich zur Validierung bei BLOB- oder TEXT-Feldern, um zu erkennen, ob der volle Inhalt übertragen wurde.
Das zurückgegebene Array hat denselben Index wie die letzte abgerufene Zeile. Es enthält keine Schlüsselnamen, sondern nur numerische Indizes, beginnend bei 0. Die Längenangaben beziehen sich auf Bytes, nicht auf Zeichen, was bei Multibyte-Zeichensätzen (z. B. UTF-8) zu berücksichtigen ist.
Achtung: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 entfernt. Für neue Projekte sollte stattdessen mysqli_fetch_lengths() oder PDO verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Eine gültige MySQL-Ergebnis-Ressource, die von mysql_query() zurückgegeben wurde. Es muss bereits eine Zeile mit einer der mysql_fetch_*-Funktionen abgerufen worden sein. |
Rückgabewert
false zurückgegeben.Beispiele
Feldlängen einer abgerufenen Zeile ausgeben
<?php
$conn = mysql_connect('localhost', 'user', 'password');
mysql_select_db('testdb', $conn);
$result = mysql_query('SELECT id, name, bio FROM users LIMIT 1', $conn);
if ($row = mysql_fetch_row($result)) {
$lengths = mysql_fetch_lengths($result);
foreach ($row as $index => $value) {
echo "Spalte $index: Wert = '$value', Länge = {$lengths[$index]} Bytes\n";
}
}
mysql_close($conn);
?>
Unterscheidung zwischen NULL und leerem String
<?php
$conn = mysql_connect('localhost', 'user', 'password');
mysql_select_db('testdb', $conn);
// Annahme: Tabelle hat Spalte 'optional_field', die NULL oder '' sein kann
$result = mysql_query('SELECT id, optional_field FROM users LIMIT 3', $conn);
while ($row = mysql_fetch_row($result)) {
$lengths = mysql_fetch_lengths($result);
$fieldValue = $row[1];
$fieldLength = $lengths[1];
if ($fieldValue === null) {
echo "ID {$row[0]}: Feld ist NULL\n";
} elseif ($fieldLength === 0) {
echo "ID {$row[0]}: Feld ist ein leerer String\n";
} else {
echo "ID {$row[0]}: Feld hat Inhalt ($fieldLength Bytes): '$fieldValue'\n";
}
}
mysql_close($conn);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) eingestuft und in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, ist nicht mehr lauffähig unter PHP 7+. Verwende stattdessen mysqli_fetch_lengths() zusammen mit mysqli_fetch_row() oder die entsprechenden PDO-Äquivalente.
Die zurückgegebenen Längen beziehen sich auf Bytes, nicht auf Zeichen. Bei UTF-8-kodierten Feldern kann ein einzelnes Zeichen 1–4 Bytes belegen, weshalb die Byte-Länge von der Zeichenanzahl abweichen kann. Für die Zeichenanzahl sollte mb_strlen() verwendet werden.
mysql_fetch_lengths() darf erst nach einem erfolgreichen Aufruf einer mysql_fetch_*-Funktion aufgerufen werden, da die Längen intern erst beim Abruf einer Zeile gesetzt werden. Ein Aufruf ohne vorherigen Zeilenabruf gibt false zurück.