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;
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;