mi pare normale...ogni volta che richiami $pagina->fetch_both() rifai la query.

O fai così:
Codice PHP:
<?php
function fetch_both($result)
{
try
{
$db $this->query($result);
$result $db->fetchAll(PDO::FETCH_BOTH);
}
catch(
PDOException $e)
{    echo 
'Attenzione funzione fetch_both: '.$e->getMessage();    }
return 
$result;
}

...
// nella pagina


 
$pagina= new pagine();

$pagine $pagina->pagina('index');
$records $pagina->fetch_both();
foreach(
$records as $dettagli_pagina)
{echo 
$dettagli_pagina['nome'].' '.$dettagli_pagina['testo'];
}
?>
Oppure ti salvi il risultato della query in un campo della classe e fai una funzione per il fetch

Codice PHP:
<?php
function fetch_both($result)
{
try
{

return 
$this->results->fetch(PDO::FETCH_BOTH);
}
catch(
PDOException $e)
{    echo 
'Attenzione funzione fetch_both: '.$e->getMessage();    }

}

function 
query($sql)

$db $this->connect();
$db->beginTransaction(); /*disabilitazione dell'auto-commit*/
$query $db->prepare($sql);
$query->execute();
$this->results $db->commit(); /* applica le modifiche*/

}

...

 
$pagina= new pagine();

$pagine $pagina->pagina('index');
$pagina->query(...);
while (
$dettagli_pagina $pagina->fetch_both($pagine))
{echo 
$dettagli_pagina['nome'].' '.$dettagli_pagina['testo'];
}
?>