有一个简单的页面,可以从MySQL中提取结果并将其显示在表中。我已经启用了对结果的分页,并允许用户设置每页显示的结果数。我正在传递两个querystring值来处理此问题:"page"one_answers"count"。
然后,我使用SQL_CALC_FOUND_ROWS
指令计算MySQL查询的LIMIT,然后调用SELECT FOUND_ROWS();
来获得结果总数。这一切都很好。
现在,我想验证querystring值。当我在数组中存储"count"的结果/页面值的可能"正确"值时,我只需检查传递的"count"值是否在该数组中,如果没有设置为默认值。对于"页面"值,我有点心理障碍。。。为了确定传递的"page"是否有任何结果,也就是说它是"正确的",我需要先去数据库找到结果计数,但由于我只想去数据库一次,我需要包括LIMIT,它们基于传递的"page"值。。。鸡肉和鸡蛋。我对如何解决这个问题有几个想法:
-
按照上面的编码运行查询,如果("page"-1)*"count")结果大于从
SELECT FOUND_ROWS();
返回的值,请重新运行查询,并将新的LIMIT设置为0,count。 -
获取完整的结果集,验证传递的页面是否正确,然后使用LIMIT值从数据库中进行另一次拉取。
我宁愿根本不回到数据库,但正如我所提到的,在这个相当常见的问题上有一个心理障碍。
谢谢,
Paul
我最终使用了上面的第一个解决方案-
- 按照上面的编码运行查询,如果("page"-1)*"count")结果大于SELECT FOUND_ROWS()返回的值;,重新运行查询,并将新的LIMIT设置为0,count
这并不完美,因为在传递的页面值不正确的情况下需要第二次数据库拉取,但考虑到这是一种意外情况,只是由用户故意传递不正确的数据触发的,这是可以接受的。如果其他人有更好的解决方案,我很乐意重新打开这个问题。