Maison >développement back-end >tutoriel php >Pourquoi `mysqli_num_rows()` renvoie-t-il 0 après `mysqli_stmt::execute()` ?
Pourquoi mysqli_num_rows() renvoie 0 en PHP
Dans MySQLi, l'exécution de requêtes sans récupérer au préalable les résultats peut entraîner un nombre de lignes incorrect. Lorsque vous rencontrez ce problème avec mysqli_num_rows(), tenez compte des éléments suivants :
Exemple de code et explication
Considérez l'extrait de code ci-dessous :
$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(); $num_of_rows = $stmt->num_rows; // Error! $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent); while ($stmt->fetch()) { //... } echo($num_of_rows);
Dans ce code, mysqli_num_rows() renvoie toujours 0 car les résultats n'ont pas été récupérés encore.
Solution : utilisez mysqli_stmt::store_result()
Avant d'appeler mysqli_num_rows(), vous devez appeler mysqli_stmt::store_result() pour stocker la requête donne lieu à un tampon. Ce processus permet le comptage de rowCount :
$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(); // Fetches results into a memory buffer $num_of_rows = $stmt->num_rows; $stmt->bind_result($child_id, $child_title, $child_visible, $child_parent); while ($stmt->fetch()) { //... } echo($num_of_rows);
N'oubliez pas de consulter la documentation de mysqli_num_rows() car ces détails sont généralement mentionnés dans la section de description.
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!