W3docs

fetch_lengths

Erfahren Sie mehr über die PHP-Funktion mysqli_fetch_lengths(), die ein Array mit den Spaltenlängen der aktuellen Zeile eines MySQLi-Ergebnisses zurückgibt.

In diesem Artikel befassen wir uns mit der Funktion mysqli_fetch_lengths() in PHP. Sie gibt ein array zurück, das die Längen jeder Spalte in der aktuellen Zeile eines MySQLi-Ergebnisses enthält. Wir erklären die Syntax, Rückgabewerte, das objektorientierte Äquivalent, häufige Anwendungsfälle und die typischen Fallstricke.

Was mysqli_fetch_lengths() macht

Die Funktion mysqli_fetch_lengths() ist eine in PHP eingebaute Funktion, die die Längen – in Bytes – jedes Spaltenwerts in der zuletzt abgerufenen Zeile eines MySQLi-Ergebnisses zurückgibt. Sie liest die Zeile selbst nicht; stattdessen meldet sie die Byte-Länge jeder Spalte in der Zeile, auf die der Ergebniszeiger aktuell zeigt.

Das ist wichtig, weil MySQL alles, was es an den Client sendet, als Bytes speichert – die Länge entspricht der tatsächlichen Größe der zurückgegebenen Daten, nicht der definierten Maximalgröße der Spalte. Eine VARCHAR(255)-Spalte, die den string "hello" enthält, meldet zum Beispiel eine Länge von 5, nicht 255. Bei mehrbytiger (UTF-8) Text ist die Länge die Anzahl der Bytes, die größer sein kann als die Anzahl der Zeichen.

Syntax

mysqli_fetch_lengths(mysqli_result $result): array|false
  • $result — ein Ergebnisobjekt, das von mysqli_query(), mysqli_store_result() oder mysqli_use_result() zurückgegeben wurde.
  • Rückgabe: ein numerisch indiziertes array mit den Spaltenlängen der aktuellen Zeile, oder false, wenn noch keine Zeile abgerufen wurde (oder bei einem Fehler).

Wann man es verwendet

mysqli_fetch_lengths() kommt zum Einsatz, wenn die Größe der zurückgegebenen Daten genauso wichtig ist wie die Daten selbst:

  • Verarbeitung von Binary/BLOB-Spalten, bei denen die genaue Byte-Anzahl vor der Verarbeitung benötigt wird.
  • Defensive Prüfungen – Bestätigung, dass eine Spalte tatsächlich Daten zurückgegeben hat und kein leerer string ist.
  • Protokollierung, Debugging oder Diagnosen darüber, wie viele Daten jede Abfrage zurückgibt.

Da die Funktion vom Zeilenzeiger abhängt, muss sie nach einem Abruf (mysqli_fetch_row(), mysqli_fetch_array() oder mysqli_fetch_assoc()) und vor dem nächsten Abruf, der den Zeiger weiterbewegt, aufgerufen werden.

Verwendung der Funktion mysqli_fetch_lengths()

mysqli_fetch_lengths() arbeitet auf dem aktuellen Zeilenzeiger, daher wird sie typischerweise innerhalb einer Abrufschleife aufgerufen, direkt nach dem Abrufen einer Zeile:

<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");

if (!$mysqli) {
    die("Connection failed: " . mysqli_connect_error());
}

$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);

if ($result) {
    while ($row = mysqli_fetch_row($result)) {
        $lengths = mysqli_fetch_lengths($result);
        if ($lengths !== false) {
            for ($i = 0; $i < count($lengths); $i++) {
                printf("Length of column %d: %d\n", $i, $lengths[$i]);
            }
        }
    }
}

mysqli_close($mysqli);
?>

In diesem Beispiel verbinden wir uns mit der Datenbank und führen eine Abfrage aus. Wir prüfen, ob Verbindung und Abfrage erfolgreich waren. Innerhalb der while-Schleife bewegt mysqli_fetch_row() den Zeilenzeiger zur nächsten Zeile. Anschließend rufen wir mysqli_fetch_lengths() auf, um ein array mit den Spaltenlängen dieser Zeile zu erhalten. Da die Funktion bei einem Fehler false zurückgibt, prüfen wir das Ergebnis, bevor wir mit einer for-Schleife durch die Längen iterieren und sie ausgeben.

Objektorientierter Stil

Dieselbe Operation steht als Methode des mysqli_result-Objekts zur Verfügung. Der meiste moderne Code verwendet diesen Stil:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Connection failed: " . $mysqli->connect_error);
}

$result = $mysqli->query("SELECT id, name FROM my_table");

if ($result) {
    while ($row = $result->fetch_row()) {
        $lengths = $result->lengths; // property, not a method call
        printf("id length: %d, name length: %d\n", $lengths[0], $lengths[1]);
    }
}

$mysqli->close();
?>

Im OOP-Stil werden die Längen als schreibgeschützte $result->lengths-Eigenschaft und nicht als Methode bereitgestellt.

Häufige Fallstricke

  • Nach einem Abruf aufrufen, nicht davor. Wird mysqli_fetch_lengths() aufgerufen, bevor eine Zeile abgerufen wurde, gibt sie false zurück – der Zeilenzeiger hat nichts zu messen.
  • Längen sind in Bytes angegeben. Bei mehrbytiger Text (wie UTF-8) kann die Byte-Länge die Zeichenanzahl übersteigen. Verwenden Sie mb_strlen(), wenn Sie stattdessen eine Zeichenanzahl benötigen.
  • Sie spiegelt nur die aktuelle Zeile wider. Ein erneuter Aufruf nach dem Abrufen der nächsten Zeile liefert die Längen für die neue Zeile – speichern Sie das array, wenn Sie die vorherigen Werte benötigen.
  • NULL-Spalten melden eine Länge von 0, genauso wie ein leerer string – kombinieren Sie dies mit dem abgerufenen Wert, wenn Sie zwischen beiden unterscheiden müssen.

Verwandte Funktionen

Fazit

Die Funktion mysqli_fetch_lengths() ist ein praktisches Werkzeug, um die Byte-Größe jeder Spalte in der aktuellen Zeile eines MySQLi-Ergebnisses abzurufen. Denken Sie daran, dass sie auf der zuletzt abgerufenen Zeile arbeitet, Längen in Bytes zurückgibt und false liefert, wenn keine Zeile verfügbar ist – wer diese Regeln im Kopf behält, kann sie zuverlässig in seinen Datenbankworkflows einsetzen.

Übung

Übung
Was macht die Funktion mysqli_fetch_lengths in PHP?
Was macht die Funktion mysqli_fetch_lengths in PHP?
Was this page helpful?