Signatur
Beschreibung
mysqli_fetch_lengths() liefert ein numerisch indiziertes Array, das die Längen der einzelnen Spaltenwerte (in Bytes) der zuletzt mit mysqli_fetch_row(), mysqli_fetch_assoc() oder mysqli_fetch_array() abgerufenen Zeile enthält. Der Index entspricht dabei dem Spaltenindex (beginnend bei 0).
Die Funktion ist besonders nützlich, wenn man mit BLOB-Spalten oder sehr langen Textfeldern arbeitet und wissen möchte, wie viele Bytes ein bestimmter Wert tatsächlich belegt, ohne die Daten selbst zunächst mit strlen() ausmessen zu müssen. Dies kann relevant sein, wenn Binärdaten Null-Bytes enthalten, die strlen() verfrüht beenden würden.
Die Funktion kann nur aufgerufen werden, nachdem eine Zeile aus der Ergebnismenge abgerufen wurde. Wird sie vor dem ersten Fetch oder nach dem Ende der Ergebnismenge aufgerufen, gibt sie false zurück. Die zurückgegebenen Längen beziehen sich immer auf die aktuell im Ergebnis-Buffer stehende Zeile.
Im objektorientierten Stil steht die Eigenschaft $result->lengths zur Verfügung, die äquivalent zur prozeduralen Funktion ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Das mysqli_result-Objekt, das durch einen vorherigen Aufruf von mysqli_query(), mysqli_store_result() oder mysqli_use_result() erzeugt wurde. |
Rückgabewert
false zurück, wenn keine aktuelle Zeile vorhanden ist (d. h. wenn noch kein Fetch-Aufruf erfolgte oder die Ergebnismenge erschöpft ist).Beispiele
Byte-Längen aller Spalten einer Zeile ausgeben
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$result = $mysqli->query("SELECT id, username, bio FROM users LIMIT 1");
if ($row = $result->fetch_assoc()) {
$lengths = mysqli_fetch_lengths($result);
// Alternativ OOP: $lengths = $result->lengths;
$fields = $result->fetch_fields();
foreach ($fields as $index => $field) {
echo "Spalte '{$field->name}': " . $lengths[$index] . " Bytes\n";
}
}
$result->free();
$mysqli->close();
Binäre BLOB-Daten korrekt mit Byte-Länge auslesen
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
// BLOB kann Null-Bytes enthalten – strlen() wäre hier unzuverlässig
$result = $mysqli->query("SELECT id, file_data FROM uploads LIMIT 1");
if ($row = mysqli_fetch_row($result)) {
$lengths = mysqli_fetch_lengths($result);
$blobLength = $lengths[1]; // Index 1 = Spalte 'file_data'
echo "Tatsächliche BLOB-Größe: {$blobLength} Bytes\n";
// strlen() könnte bei Null-Bytes falsche Werte liefern:
echo "strlen() meldet: " . strlen($row[1]) . " Bytes\n";
}
$result->free();
$mysqli->close();
// Wichtig · Fallstricke
Aufruf-Reihenfolge beachten: mysqli_fetch_lengths() muss nach einem Fetch-Aufruf aufgerufen werden. Wird sie davor oder nach dem Ende der Ergebnismenge aufgerufen, gibt sie false zurück. Ein häufiger Fehler ist das Aufrufen nach mysqli_data_seek() ohne anschließendem Fetch.
Binärdaten: Bei BLOB-Spalten ist die von mysqli_fetch_lengths() zurückgegebene Länge die einzig verlässliche Methode zur Größenbestimmung, da strlen() bei Strings mit eingebetteten Null-Bytes (\0) falsche Werte liefern kann.
OOP-Äquivalent: Im objektorientierten Stil kann statt der Funktion direkt die Eigenschaft $result->lengths genutzt werden.