I don't remember if there is no such way, or if it's implementation specific, i.e. depends on the DBMS and/or driver used. The documentation and or googling should let you find the answer.
There is however a way to solve the problem: store the data some other way!
The simplest way is obviously to always
$arr = $pdo_stmt->fetchAll();
followed by array iteration, which supports both fetching the next element until the end is reached, [man]foreach[/man] as well as resetting the internal array pointer, [man]reset[/man].
You could also build a query result handling class which implements Iterator to make the class instances iterateable with foreach. On instantiation, you feed the constructor your query result resource. When you consume a result resource element with fetch(), you first store it in an instance array.
Should you reset the data pointer before the result resource has been fully consumed, your class needs to check wether to use the array (if there is one, always use this until you get to the end of it, or the result resource (if the data pointer has moved beyond the last array elemnent).
In short, as you consume the resource you transfer each row into an array for later use.
But, if you need to reuse your query result, I'd much surprised if fetchAll() + array iteration isn't always faster than the class described above which hides the underlying data structure (array or resource).
And unless you often use only small subsets of the result resources, you won't lose much, if anything by always using fetchAll() rather than repeated calls to fetch(), so you might as well always handle your results as arrays.