【问题标题】:SQL - Select with Limit failSQL - 限制选择失败
【发布时间】:2014-04-01 17:23:36
【问题描述】:

目前我的数据库中有 12 行。 在添加所有这些之间我删除了一些,所以 ID 列没有正确升序。

我正在运行以下查询,使用 SQL 创建页面 $page$_GET,它在数字上是(1、2、3 等):

"SELECT  *
FROM    cms_guestbook
WHERE   moderated = 'Y'
ORDER BY  id DESC
LIMIT   ". (($page - 1) * 5) . ", " . (5 * $page) 

添加第 1 页它显示正确,当我 var_dump 这个查询时它显示:LIMIT 0, 5。 添加第 2 页,它无法正确显示。我看到 7 行 (5-12),但我的 var_dump 说:LIMIT 5, 10

第 3 页也正确显示第 10-12 行。 var_dump 也表示:LIMIT 10, 15

谁知道我做错了什么?谢谢!

【问题讨论】:

  • $page = ' 1;删除表 cms_guestbook; -- '
  • 我认为@Ray 试图让您知道的是您的代码可能会受到 SQL 注入的影响。 owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
  • 我熟悉 SQL 注入。这只是一个测试用例。我总是使用 PDO 准备好的语句。

标签: php mysql pagination limit


【解决方案1】:

LIMIT 有 2 个参数 - 偏移量,行数。

在你的情况下,你会想要...

LIMIT 0, 5
LIMIT 5, 5
LIMIT 10, 5

如果您一直想返回 5 行但每次都从不同的索引开始。

根据您的问题,将 LIMIT 子句更改为

LIMIT   ". (($page - 1) * 5) . ", 5"

查看MySQL Select & Limit details 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2011-02-23
    相关资源
    最近更新 更多