W3docs

fetch_lengths

Aprende a usar mysqli_fetch_lengths() en PHP para obtener la longitud en bytes de cada columna en la fila actual de un resultado MySQLi.

En este artículo nos centraremos en la función mysqli_fetch_lengths() de PHP. Devuelve un array con las longitudes de cada columna en la fila actual de un resultado MySQLi. Explicaremos su sintaxis, los valores de retorno, el equivalente orientado a objetos, los casos de uso más comunes y los errores frecuentes a tener en cuenta.

Qué hace mysqli_fetch_lengths()

La función mysqli_fetch_lengths() es una función integrada de PHP que devuelve las longitudes —en bytes— de cada valor de columna en la fila obtenida más recientemente de un resultado MySQLi. No lee la fila en sí; en cambio, informa la longitud en bytes de cada columna en la fila donde se encuentra actualmente el puntero del resultado.

Esto importa porque MySQL almacena todo lo que envía al cliente como bytes, y la longitud es el tamaño real de los datos devueltos, no el tamaño máximo definido de la columna. Por ejemplo, una columna VARCHAR(255) que contiene la cadena "hello" reporta una longitud de 5, no 255. Para texto multibyte (UTF-8), la longitud es el número de bytes, que puede ser mayor que el número de caracteres.

Sintaxis

mysqli_fetch_lengths(mysqli_result $result): array|false
  • $result — un objeto de resultado devuelto por mysqli_query(), mysqli_store_result() o mysqli_use_result().
  • Devuelve: un array indexado numéricamente con las longitudes de las columnas para la fila actual, o false si aún no se ha obtenido ninguna fila (o en caso de error).

Cuándo usarla

Se recurre a mysqli_fetch_lengths() cuando el tamaño de los datos devueltos es tan importante como los datos en sí:

  • Manejo de columnas binary / BLOB donde se necesita el recuento exacto de bytes antes de procesarlos.
  • Comprobaciones defensivas: confirmar que una columna devolvió datos en vez de una cadena vacía.
  • Registro, depuración o diagnóstico sobre cuántos datos devuelve cada consulta.

Como depende del puntero de fila, debes llamarla después de una obtención (mysqli_fetch_row(), mysqli_fetch_array() o mysqli_fetch_assoc()) y antes de que la siguiente obtención avance el puntero.

Cómo usar la función mysqli_fetch_lengths()

mysqli_fetch_lengths() opera sobre el puntero de fila actual, por lo que normalmente se llama dentro de un bucle de obtención, justo después de obtener una fila:

<?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);
?>

En este ejemplo, nos conectamos a la base de datos y ejecutamos una consulta. Verificamos que la conexión y la consulta fueron exitosas. Dentro del bucle while, mysqli_fetch_row() avanza el puntero de fila a la siguiente fila. Luego llamamos a mysqli_fetch_lengths() para obtener un array de longitudes de columnas para esa fila. La función devuelve false en caso de fallo, por lo que verificamos el resultado antes de recorrer las longitudes con un bucle for para imprimirlas.

Estilo orientado a objetos

La misma operación está disponible como método en el objeto mysqli_result. La mayoría del código moderno utiliza este estilo:

<?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();
?>

Nótese que en el estilo OOP las longitudes se exponen como la propiedad de solo lectura $result->lengths, no como un método.

Errores frecuentes

  • Llámala después de una obtención, no antes. Si llamas a mysqli_fetch_lengths() antes de obtener alguna fila, devuelve false — el puntero de fila no tiene nada que medir.
  • Las longitudes están en bytes. Para texto multibyte (como UTF-8), la longitud en bytes puede superar el recuento de caracteres. Usa mb_strlen() si necesitas el número de caracteres en su lugar.
  • Solo refleja la fila actual. Llamarla de nuevo tras obtener la siguiente fila devuelve las longitudes de esa nueva fila, así que guarda el array si necesitas los valores anteriores.
  • Las columnas NULL reportan una longitud de 0, igual que una cadena vacía — combínalo con el valor obtenido si necesitas distinguirlos.

Funciones relacionadas

Conclusión

La función mysqli_fetch_lengths() es una herramienta práctica para obtener el tamaño en bytes de cada columna en la fila actual de un resultado MySQLi. Recuerda que opera sobre la fila obtenida más recientemente, devuelve longitudes en bytes y retorna false cuando no hay ninguna fila disponible — tener en cuenta estas reglas te permitirá integrarla de forma confiable en tus flujos de trabajo con bases de datos.

Práctica

Práctica
¿Qué hace la función mysqli_fetch_lengths en PHP?
¿Qué hace la función mysqli_fetch_lengths en PHP?
Was this page helpful?