W3docs

fetch_lengths

Découvrez la fonction mysqli_fetch_lengths() en PHP : syntaxe, valeurs de retour, équivalent orienté objet et cas d'usage courants.

Dans cet article, nous nous concentrons sur la fonction mysqli_fetch_lengths() en PHP. Elle renvoie un array contenant la longueur de chaque colonne dans la ligne courante d'un jeu de résultats MySQLi. Nous expliquons sa syntaxe, ses valeurs de retour, l'équivalent orienté objet, les cas d'usage courants et les pièges à éviter.

Ce que fait mysqli_fetch_lengths()

La fonction mysqli_fetch_lengths() est une fonction PHP intégrée qui renvoie les longueurs — en octets — de chaque valeur de colonne dans la ligne la plus récemment récupérée d'un jeu de résultats MySQLi. Elle ne lit pas la ligne elle-même ; elle indique la longueur en octets de chaque colonne de la ligne sur laquelle se trouve actuellement le pointeur de résultat.

Cela est important car MySQL envoie tout au client sous forme d'octets, et la longueur correspond à la taille réelle des données retournées — et non à la taille maximale définie pour la colonne. Par exemple, une colonne VARCHAR(255) contenant la chaîne "hello" rapporte une longueur de 5, et non 255. Pour le texte multi-octet (UTF-8), la longueur correspond au nombre d'octets, qui peut être supérieur au nombre de caractères.

Syntaxe

mysqli_fetch_lengths(mysqli_result $result): array|false
  • $result — un objet résultat renvoyé par mysqli_query(), mysqli_store_result() ou mysqli_use_result().
  • Retourne : un array indexé numériquement des longueurs de colonnes pour la ligne courante, ou false si aucune ligne n'a encore été récupérée (ou en cas d'erreur).

Quand l'utiliser

On fait appel à mysqli_fetch_lengths() lorsque la taille des données retournées est aussi importante que les données elles-mêmes :

  • Traitement des colonnes binaires / BLOB où l'on a besoin du nombre exact d'octets avant de traiter les données.
  • Vérifications défensives — s'assurer qu'une colonne a bien retourné des données plutôt qu'une chaîne vide.
  • Journalisation, débogage ou diagnostics sur la quantité de données retournées par chaque requête.

Comme elle dépend du pointeur de ligne, vous devez l'appeler après une récupération (mysqli_fetch_row(), mysqli_fetch_array() ou mysqli_fetch_assoc()) et avant que la récupération suivante ne fasse avancer le pointeur.

Comment utiliser la fonction mysqli_fetch_lengths()

mysqli_fetch_lengths() opère sur le pointeur de ligne courant, vous l'appelez donc généralement à l'intérieur d'une boucle de récupération, juste après avoir récupéré une ligne :

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

Dans cet exemple, nous nous connectons à la base de données et exécutons une requête. Nous vérifions que la connexion et la requête ont réussi. À l'intérieur de la boucle while, mysqli_fetch_row() fait avancer le pointeur de ligne vers la ligne suivante. Nous appelons ensuite mysqli_fetch_lengths() pour obtenir un array de longueurs de colonnes pour cette ligne. La fonction renvoie false en cas d'échec, nous vérifions donc le résultat avant de parcourir les longueurs avec une boucle for pour les afficher.

Style orienté objet

La même opération est disponible en tant que méthode sur l'objet mysqli_result. La plupart du code moderne utilise ce style :

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

Notez qu'en style OOP, les longueurs sont exposées en tant que propriété en lecture seule $result->lengths, et non comme méthode.

Pièges courants

  • Appelez-la après une récupération, pas avant. Si vous appelez mysqli_fetch_lengths() avant qu'une ligne ait été récupérée, elle renvoie false — le pointeur de ligne n'a rien à mesurer.
  • Les longueurs sont en octets. Pour du texte multi-octet (tel que UTF-8), la longueur en octets peut dépasser le nombre de caractères. Utilisez mb_strlen() si vous avez besoin d'un comptage de caractères.
  • Elle ne reflète que la ligne courante. L'appeler à nouveau après avoir récupéré la ligne suivante donne les longueurs pour cette nouvelle ligne — stockez donc l'array si vous avez besoin des valeurs précédentes.
  • Les colonnes NULL rapportent une longueur de 0, identique à une chaîne vide — combinez-la avec la valeur récupérée si vous devez les distinguer.

Fonctions associées

Conclusion

La fonction mysqli_fetch_lengths() est un outil pratique pour récupérer la taille en octets de chaque colonne dans la ligne courante d'un jeu de résultats MySQLi. Retenez qu'elle opère sur la ligne la plus récemment récupérée, renvoie les longueurs en octets et retourne false lorsqu'aucune ligne n'est disponible — garder ces règles à l'esprit vous permettra de l'intégrer de manière fiable dans vos flux de travail avec les bases de données.

Practice

Pratique
Que fait la fonction mysqli_fetch_lengths en PHP ?
Que fait la fonction mysqli_fetch_lengths en PHP ?
Was this page helpful?