@Crozin no właśnie na chwilę obecną tak się bawię, tylko właśnie próbuje tego uniknąć i zrobić to jakoś bardziej elegancko. Jest jeszcze inna opcja, z racji że korzystam z nakładki na PDO w stylu Zend_Db_Select, mogę przekazać do takiej nakładki na PDOStatement również ostatnie zapytanie i jakoś zgrabnie nim operować. I mógłbym zrobić coś takiego przykładowo:
<?php
class Statement extends PDOStatement
{
protected $rowCount = false;
protected $database;
public function __construct(Database $database)
{
$this->database = $database;
}
public function rowCount()
{
if(false !== $this->rowCount)
{
return $this->rowCount;
}
$res = $this->database->reset(Database::SELECT)->select('COUNT(*) as total')->get()->fetch(PDO::FETCH_ASSOC);
$this->rowCount = $res['total'];
return $this->rowCount;
}
}
Tyle że to niesie ze sobą kilka problemów. Pierwszym jest sytuacja kiedy ktoś zamiast "buildera" użyje zwykłego query/prepare, wówczas powyższy przykład bankowo zwróci błąd. Drugi problem, to jest kolejne zapytanie.
O ile count jest ok, dla sprawdzenia czy wynik zawiera jakieś dane, o tyle w przypadku stronicowania, gdzie potrzebuje wiedzieć ile tych rekordów jest ogółem, tak count się nie sprawdzi.. O ile w niektórych miejscach tego stronicowania nie muszę używać, a byłoby jedynie dodatkową funkcjonalnością, tak w galerii którą ostatnio robiłem, z listą dodanych zdjęć wypadałoby już stronicować, co by nie wywalić kilkuset rekordów na monitor..