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

问题描述 投票:0回答:1

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

然后,我使用这些值来计算 MySQL 查询的 LIMIT,使用

SQL_CALC_FOUND_ROWS
指令,然后调用
SELECT FOUND_ROWS();
来获取结果总数。这一切都很好用。

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

  1. 按照上面的代码运行查询,如果 (('page' - 1) * 'count') 结果大于从

    SELECT FOUND_ROWS();
    返回的值,则重新运行查询,并将新的 LIMIT 设置为 0, count .

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

我根本不想回到数据库,但正如我提到的,对这个相当常见的问题有心理障碍。

mysql pagination
1个回答
0
投票

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

  1. 按照上面的代码运行查询,如果 (('page' - 1) * 'count') 结果大于 SELECT FOUND_ROWS(); 返回的值,则重新运行查询,并将新的 LIMIT 设置为 0,数数。

它并不完美,因为在传递的页面值错误的情况下需要第二次数据库拉取,但考虑到这是仅由用户故意传递错误数据触发的意外情况,这是可以接受的。如果其他人有更好的解决方案,我很乐意重新提出问题。

© www.soinside.com 2019 - 2024. All rights reserved.