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.
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.
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;
}
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');
}
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.
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;
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";
}
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;
}
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.