Поведение функции mysqli_num_rows() зависит от того, используется ли буферизованная или небуферизованная результирующая выборка. Для небуферизованной выборки mysqli_num_rows() не вернет правильное число рядов пока все ряды не будут получены и обработаны.