Maison >développement back-end >tutoriel php >Pourquoi mysqli_stmt::num_rows renvoie-t-il 0 et comment puis-je y remédier ?

Pourquoi mysqli_stmt::num_rows renvoie-t-il 0 et comment puis-je y remédier ?

DDD
DDDoriginal
2024-12-11 16:54:15945parcourir

Why Does mysqli_stmt::num_rows Return 0, and How Can I Fix It?

Comprendre le mystère de mysqli_stmt::num_rows renvoyant 0

Dans un monde d'interactions de bases de données dynamiques, il n'est pas rare de rencontrer des problèmes avec l'obtention du nombre correct de lignes à partir d'une requête MySQL. Ce problème peut survenir spécifiquement lors de l'utilisation de la fonction mysqli_stmt::num_rows.

Énoncé du problème : valeur renvoyée nulle

Les développeurs rencontrent souvent des cas où mysqli_stmt::num_rows La fonction renvoie continuellement 0 malgré la présence de lignes de résultats après l'exécution d'une requête. Cet écart peut être assez frustrant, empêchant la récupération et le traitement précis des données.

Solution : La puissance de mysqli_stmt::store_result()

La clé pour résoudre ce problème réside dans la compréhension du comportement de mysqli_stmt::num_rows. Cette fonction ne compte pas automatiquement le nombre de lignes dans le jeu de résultats ; à la place, il renvoie une valeur basée sur une condition spécifique :

  • Aucun appel à mysqli_stmt::store_result() : Si la fonction mysqli_stmt::store_result() n'est pas appelée avant en accédant à mysqli_stmt::num_rows, la fonction retournera 0, même s'il y a un résultat rows.

Pour résoudre ce problème, les développeurs doivent appeler explicitement mysqli_stmt::store_result() après avoir exécuté la requête et avant de tenter d'utiliser mysqli_stmt::num_rows. Voici un extrait de code mis à jour qui intègre cette étape nécessaire :

if ($stmt = $mysqli->prepare("SELECT id, title, visible, parent_id FROM content WHERE parent_id = ? ORDER BY page_order ASC;")) {
    $stmt->bind_param('s', $data->id);
    $stmt->execute();
    $stmt->store_result(); // Added this line
    $num_of_rows = $stmt->num_rows; 
    $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent);

    while ($stmt->fetch()) {
        // code
    }

    echo($num_of_rows);

    $stmt->close();
}

En incorporant mysqli_stmt::store_result(), le serveur MySQL est invité à stocker l'ensemble de résultats dans la mémoire côté client, le rendant ainsi disponible pour traitement ultérieur. Cela garantit que mysqli_stmt::num_rows peut compter avec précision le nombre de lignes dans l'ensemble de résultats stocké, renvoyant la valeur correcte.

Conclusion

Comprendre l'importance de mysqli_stmt::store_result() lors de l'utilisation de mysqli_stmt::num_rows est crucial pour les développeurs travailler avec des bases de données MySQL. En appelant explicitement mysqli_stmt::store_result(), les développeurs peuvent s'assurer qu'ils obtiennent un nombre de lignes précis, leur permettant ainsi de gérer les données de la base de données de manière efficace et efficiente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn