I've thought about this more and I see why it isn't working. Adding the id to the where clause won't work in this way because it doesn't account for the precedence of the position search first. I think it would require a different where clause. I've added a parameter, the first and second parameter values could be set to the same run-time value.
So the next query would be:
SELECT id FROM artworks WHERE position > %s OR (position = %s AND id > %s) ORDER BY position, id LIMIT 1
and the prev query would be:
SELECT id FROM artworks WHERE position < %s OR (position = %s AND id < %s) ORDER BY position DESC, id DESC LIMIT 1
If you want to only display artwork from the same artist then you would have to add another filter to each previous and next recordset so that it filters by the artist field of the first recordset, just like you did with the position. Set a $_GET variable from the first recordset and then add it as a parameter to the other recordsets that way.