PHP MySQLi 分页 LIMIT 问题

标签 php mysql mysqli pagination

我目前正在开发一个分页脚本,用于显示每页上限为 20 条的记录。

我在 Stack Overflow 上发现了一个类似的问题,其中有一个如何执行此操作的示例。我已经尝试了代码并进行了调整,但我无法使其正常运行。

代码是:

$pages = ceil($rescnt['cnt']/$limit);

    $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
        'default'   => 1,
        'min_range' => 1,
    ),
    )));
    $offset = ($page - 1)  * $limit;
    $start = $offset;
    $end = min(($offset + $limit), $rescnt['cnt']);

MySQL 数据库中有 41 条记录 (0 - 40)。

首页显示正确,LIMIT 0,20。但是,第二页的限制是 LIMIT 20,40,实际上返回 21 个结果。

脚本计算总共应该有 3 页(P1 20,P2 20,P3 1)但是,P1 有 20,P2 有 21。P3 是空的。

我已经尝试改变页面的计算等,但它仍然不起作用。谁能给我一些关于这个问题的见解?

提前致谢。

最佳答案

从 21 到 40,而不是 20。

LIMIT 子句是包容性的。它来自记录 20,计数 20。

限制 20,20 = 20,21,22,...37,38,39。

编辑:

您会看到 LIMIT 0,20 显示 20 行,但它们从零开始。就像数组键一样,这会在迭代中永久存在。

更好:

您正在更新错误的列。

前 20 个结果 = LIMIT 0,20

接下来的 20 个结果 = LIMIT 19,20
最终 20 个结果 = LIMIT 39,20

LIMIT <start row>, <row count>

关于PHP MySQLi 分页 LIMIT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27962674/

相关文章:

php - 在 Controller 中排除实体结果

php - 解码字符串中的 "=C3=A4"

php - MySQL WHERE 子句和分隔字符串的问题

php - 使用 > 符号拆分关联数组并将其显示在列表 ion php 中

php - 无论我调用 "commands out of sync"多少次,mysqli 都会出现 "next_result()"错误

带有配置文件页面的 PHP 登录/注册系统

php获取包含文件的命名空间

mysql - Cygwin 上的 Heroku 正在记录一些奇怪的东西,看起来像 "mysql --help"

php - 为不同的值获取 num_row 一次

php - 没有将正确的值插入 MySQL 数据库