Ваша проблема в том, что каждый раз, когда вы вызываете $post->getRecent()
, он снова выполняет ваш запрос и поэтому $post->getRecent()->fetch()
затем снова и снова возвращает первую строку набора результатов. Просто сделайте один вызов $post->getRecent()
и используйте это значение вместо других вызовов:
$post = NEW Posts($db);
$result = $post->getRecent();
echo $result->rowCount();
while ($row = $result->fetch()) {
// process rows
}