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é parmysqli_query(),mysqli_store_result()oumysqli_use_result().- Retourne : un array indexé numériquement des longueurs de colonnes pour la ligne courante, ou
falsesi 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 renvoiefalse— 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
NULLrapportent une longueur de0, identique à une chaîne vide — combinez-la avec la valeur récupérée si vous devez les distinguer.
Fonctions associées
mysqli_fetch_row()— récupère une ligne sous forme d'array numérique (souvent utilisée avec cette fonction).mysqli_fetch_array()etmysqli_fetch_assoc()— récupèrent une ligne sous forme d'array numérique/associatif ou associatif.mysqli_fetch_fields()— obtient les métadonnées (nom, type, longueur maximale) de chaque colonne.mysqli_field_count()— obtient le nombre de colonnes de la dernière requête.
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.