分页结果:处理无效的传递数据

时间:2011-06-09 14:17:07

标签: mysql paging

有一个简单的页面可以从MySQL中提取结果并将其显示在表格中。我已对结果启用分页,并允许用户设置每页显示的结果数。我传递了两个查询字符串来处理这个问题:'page'和'count'。

然后我使用SQL_CALC_FOUND_ROWS指令计算我的MySQL查询的LIMIT,然后通过调用SELECT FOUND_ROWS();来获取结果总数。一切都很好。

现在,我想验证查询字符串值。当我在数组中存储'count'的结果/页面值的可能“正确”值时,我只是检查传递的'count'值是否在该数组中,如果没有将其设置为默认值。对于'page'值,我有一点精神障碍...为了确定传递的'page'是否有任何结果,意味着它是“正确的”,我需要去数据库并且首先找到结果计数,但由于我只想进入db一次,我需要包含LIMIT,它基于传递的'page'值...鸡肉和鸡蛋。我对如何解决这个问题有几点想法:

  1. 运行上面编码的查询,如果(('page' - 1)*'count')结果大于SELECT FOUND_ROWS();返回的值,请使用new重新运行查询LIMIT设置为0,计数。

  2. 获取完整的结果集,验证传递的页面是否正确,然后使用LIMIT值从数据库中再次拉取。

  3. 我根本不想回到数据库,但正如我所提到的,在这个相当普遍的问题上存在心理障碍。

    谢谢,

1 个答案:

答案 0 :(得分:0)

我最终使用了上面的第一个解决方案 -

  1. 运行上面编码的查询,如果(('page' - 1)*'count')结果大于SELECT FOUND_ROWS();返回的值,请重新运行查询,并将新LIMIT设置为0,算。
  2. 对于传递的页面值不好的情况需要第二次数据库拉取并不完美,但鉴于这是一个意外情况,只是由用户有意传递坏数据触发,这是可以接受的。如果其他人有更好的解决方案,我很乐意重新打开这个问题。