Mysql
 sql >> Base de données >  >> RDS >> Mysql

instruction préparée mysqli num_rows renvoie 0 tandis que la requête renvoie plus de 0

Lorsque vous exécutez une instruction via mysqli, les résultats ne sont pas réellement en PHP tant que vous ne les avez pas récupérés - les résultats sont conservés par le moteur de base de données. Donc le mysqli_stmt L'objet n'a aucun moyen de savoir combien de résultats il y a immédiatement après l'exécution.

Modifiez votre code comme suit :

$stmt->execute();
$stmt->store_result(); // pull results into PHP memory

// now you can check $stmt->num_rows;

Voir le manuel

Cela ne s'applique pas à votre exemple particulier, mais si votre jeu de résultats est volumineux, $stmt->store_result() consommera beaucoup de mémoire. Dans ce cas, si tout ce qui vous intéresse est de savoir si au moins un résultat a été renvoyé, ne stockez pas les résultats ; à la place, vérifiez simplement si les métadonnées du résultat ne sont pas nulles :

$stmt->execute();
$hasResult = $stmt->result_metadata ? true : false;

Voir le manuel