Position actuelle: Accueil> Derniers articles> mysqli_result :: $ field_count Cause possible de non définie ou d'erreur

mysqli_result :: $ field_count Cause possible de non définie ou d'erreur

gitbox 2025-05-29

Lorsque vous utilisez PHP pour le développement de la base de données, l'extension MySQLI est l'une des opérations de base de données les plus couramment utilisées. La propriété MySQLI_RESULT :: $ field_count est utilisée pour obtenir le nombre de champs (colonnes) dans le jeu de résultats. Cependant, dans le développement réel, les développeurs peuvent rencontrer une erreur ou une situation non définie où MySQLI_RESULT :: $ field_count est signalé. Cet article analysera les causes communes de ce problème et fournira des solutions correspondantes.

1. Messages d'erreur courants

Les développeurs peuvent rencontrer des invites d'erreur similaires à ce qui suit:

 Fatal error: Uncaught Error: Undefined property: mysqli_result::$field_count in ...

ou:

 Trying to access array offset on value of type bool

Ces invites d'erreur indiquent que lorsque vous essayez d'accéder à la propriété Field_Count , l'objet mysqli_result n'est pas renvoyé correctement et peut même ne pas être un objet.

2. Analyse de cause possible

1. Renvoie false au lieu de l'objet mysqli_result si la requête échoue

Lorsque l'exécution de la requête SQL échoue, la méthode mysqli :: query () renvoie false au lieu d'un objet mysqli_result . Si le code suivant le fait par défaut comme un objet de définition, une erreur se produira naturellement lors de l'accès à l'attribut.

Exemple de code:

 $mysqli = new mysqli('localhost', 'root', '', 'test');
$result = $mysqli->query("SELECT * FROM non_existing_table");

echo $result->field_count; // Signaler une erreur:Pas un objet

Solution:

Avant d'accéder à la propriété Field_Count , déterminez d'abord si la requête est réussie:

 if ($result instanceof mysqli_result) {
    echo $result->field_count;
} else {
    echo "La requête a échoué:" . $mysqli->error;
}

2. L'instruction de requête ne renvoie pas le jeu de résultats (tel que l'insert, la mise à jour)

Certaines instructions SQL telles que l'insertion , la mise à jour et la suppression ne renverront pas l'ensemble de résultats. À l'heure actuelle, Query () renvoie True et l'accès à Field_Count provoquera également une erreur.

Exemple de code:

 $result = $mysqli->query("UPDATE users SET name = 'test' WHERE id = 1");
echo $result->field_count; // Signaler une erreur:Pas un objet

Solution:

Distinguer différents types d'instructions SQL et utilisez Field_Count uniquement pour les requêtes qui renvoient les objets MySQLI_RESULT :

 $result = $mysqli->query("SELECT * FROM users");
if ($result instanceof mysqli_result) {
    echo "Nombre de colonnes:" . $result->field_count;
} else {
    echo "Pas un ensemble de résultats de requête,Statut d'exécution:" . ($result ? 'succès' : 'échouer');
}

3. La version d'extension PHP ou MySQLI est trop ancienne ou non activée

Certaines versions plus anciennes de PHP ou de l'extension MySQLI ne sont pas activées correctement peuvent rendre les propriétés pertinentes non disponibles.

Solution:

Confirmez les versions d'extension PHP et MySQLI :

 phpinfo();

Assurez-vous que l'extension MySQLI est activée et il est recommandé que la version PHP soit 7.4 et plus.

4. Erreur en utilisant un accès statique

Field_Count est une propriété d'instance, et l'accès à tort en utilisant le mode statique entraînera des erreurs non définies.

Exemple d'erreur:

 echo mysqli_result::$field_count; // erreur

La bonne façon:

 echo $result->field_count;

5. Erreur d'analyse JSON, réponse de l'API ou autre déguisement d'objets

Dans certains cas, les développeurs peuvent analyser par erreur les données externes en tant que mysqli_result , telles que les données obtenues à partir de l'API:

 $response = file_get_contents("https://gitbox.net/api/data");
$data = json_decode($response);

echo $data->field_count; // En fait pas mysqli_result Objet

Solution:

Assurez-vous que vous utilisez l'objet de type correct et faites des jugements de type:

 if ($data instanceof mysqli_result) {
    echo $data->field_count;
} else {
    echo "类型erreur,Impossible d'accéder field_count";
}

3. Structure du jugement général recommandé

Afin d'améliorer la robustesse du code, il est recommandé d'encapsuler uniformément la logique de requête:

 function safe_query($mysqli, $sql) {
    $result = $mysqli->query($sql);
    if ($result instanceof mysqli_result) {
        return $result;
    } else {
        error_log("SQL Error: " . $mysqli->error);
        return false;
    }
}

// Comment utiliser
$result = safe_query($mysqli, "SELECT * FROM users");
if ($result) {
    echo "Nombre de colonnes:" . $result->field_count;
}

4. Résumé

La raison pour laquelle MySQLI_RESULT :: $ Field_Count rapporte une erreur ou n'est pas définie est souvent parce que le développeur ne gère pas correctement le type de résultat de retour Query () , ou l'environnement d'utilisation et la méthode d'appel ne sont pas clairs. Grâce aux méthodes ci-dessus, les développeurs peuvent éviter efficacement de telles erreurs et écrire le code de fonctionnement de la base de données PHP plus sûre et plus robuste.