Кароче, в объекте mysqli_query (процедур...) есть приватная условная переменная $i, которая увеличивается при каждом использовании процедуры
mysqli_fetch_assoc($result); ($result->num_row передаёт число выводимых массивов данных, которое присваивает себе условная $i).
По окончанию выводимых обьектов, начнутся выводиться 'null', что останавливает цикл.
Вот пример того, как работает mysqli_fetch_assoc.
$i = 0;
$array = array('Катя', 'Лёня', 'Ира', 'Оля');
while($data[] = $array[$i]) $i++;
var_dump($data);
Вот запрос с бд:
for($i = 0; $i <= ($result->num_rows+2); $i++){
$mysqli_fetch_assoc[] = mysqli_fetch_assoc($result);
}
Вот пруф.