This really isn't that hard if i understand what you are trying to do.
You need to run the same query each time but change the value set for limit x,y.
SELECT * FROM table WHERE something ORDER BY ASC/DESC LIMIT $recstart, $numrecs
First time you run the script I assume $recstart=0 and $numrecs=1 (if you only want to return 1 record).
When the user clicks "next" increment the $recstart value by 1.
If the user clicks "previous" increment $recstart by -1. As long as the rest of your query is the same, you will always be returning a recordset in the same order (assuming your database doesn't get updated in midstream). Using the record start value of LIMIT lets you effectively move forward and back in the record set.
You do have to check for the case in which you are either at the begining or end of the record set. I do this by running an identical seperate query that counts the number of records returned for the entire set. In that query eliminate the LIMIT part.
SELECT count(*) FROM table WHERE something
Does that solve it?