非常简单的LIMIT查询麻烦阻止了我

时间:2016-02-02 14:46:47

标签: php mysql

我有以下PHP代码:

$page = $_POST["page"];
$pageSize = $_POST["pageSize"];

$toRecord = $page * $pageSize;
$fromRecord = $toRecord - $pageSize;

$query = "SELECT * FROM table LIMIT  $fromRecord, $toRecord";

现在,在10个总表记录中,如果我的$pageSize是' 3',则第一页返回3条记录,第2条记录,第3条记录和最后一条记录一个1记录。我在SQL方面的经验有限,我做错了什么?

1 个答案:

答案 0 :(得分:4)

LIMIT参数是offset, row_count。所以你不应该使用$toRecord,而应该使用$pageSize - 并且不要忘记逃避它。事实上,我稍微改写了这个逻辑:

define('DEFAULT_PAGE_NO', 1);
define('DEFAULT_PAGE_SIZE', 10);

if (isset($_POST['page']) {
  $pageNo = max(DEFAULT_PAGE_NO, (int)$_POST['page']);
}
else {
  $pageNo = DEFAULT_PAGE_NO;
}

if (isset($_POST['pageSize']) {
  $pageSize = (int)$_POST['pageSize'];
  if ($pageSize <= 0) {
    $pageSize = DEFAULT_PAGE_SIZE; 
  } 
}
else {
  $pageSize = DEFAULT_PAGE_SIZE;
}

$offset = ($pageNo - 1) * $pageSize;
$query = "SELECT * FROM table LIMIT $offset, $pageSize";