You should use the limit clause and simply keep track of how many records to skip.
if you are on record 10 for example, limit 10,1
will skip the first 10 and bring back one. The 'next' button would change the query to limit 11,1
and so on.
As long as you have an order by
(in this case the ID field seems PERFECT) that you know, the data will be returned in the exact same order each time, so you can walk forawrds and backwards through the resultset one row at a time reliably.
Snipped from the docs:
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants (except when using prepared statements).
With two arguments, the first argument specifies the offset of the first row to return, and the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15