php PDOStatement fetchAll第二次

I do not really understand the point of PDOStatement since:

$PDO = new PDO(); 
$PDOS = $PDO->query($sql);

var_dump($PDOS->fetchAll()); //will return data 
var_dump($PDOS->fetchAll()); //empty

Is there a param that needs to be passed so that 2nd time fetchAll returns data, but without executing the SQL again?

Just store the result the first call to fetchAll() into a PHP variable. Any reason you can't do that?

$results = $PDOS->fetchAll();

Then you can use $results as much as you need to without taxing your database any further.

The PDOStatement has an iterator.

PDOStatement::fetch() will iterate over the rowset. When calling fetchAll() the iterator is at the last row.

This iterator moves only in 1 direction. The only method to go back is to execute the query again. This is the nature of the database and PHP should not keep the entire rowset in memory.