MySQL PHP分页 - 在每个页面上获得相同的结果或根本没有结果

时间:2017-11-14 20:08:30

标签: php mysql pagination partition

我正在尝试从MySQL查询数据。我需要对数据表进行分页。见下面的代码;你可以看到我在限制后使用“OFFSET”。我也可以使用“,”

然而,我尝试了两种方法,但OFFSET没有显示任何结果,“,”会显示结果,但无论我在哪个页面都会得到相同的10个结果。

以下是代码:

// define how many results you want per page
$results_per_page = 10;

// find out the number of results stored in database
$sql='SELECT * FROM ETF';
$result = mysqli_query($con,$sql);

$number_of_results = mysqli_num_rows($result);

// determine number of total pages available
$number_of_pages = ceil($number_of_results/$results_per_page);

// determine which page number visitor is currently on
if (!isset($_GET["page"])) {
  $page = 1;
} else {
  $page = $_GET["page"];
}

// determine the sql LIMIT starting number for the results on the displaying page
$this_page_first_result = ($page-1)*$results_per_page;

// retrieve selected results from database and display them on page
$sql='SELECT * FROM ETF LIMIT '. $this_page_first_result . " OFFSET " . $results_per_page;

$result = mysqli_query($con, $sql);

while($row = mysqli_fetch_assoc($result)) {
  echo $row['ETF'] . ' ' . $row['ETF NAME']. '<br>';
}


// display the links to the pages
for ($page=1;$page<=$number_of_pages;$page++) {
  echo '<a href="index.php/stocks/sec-forms/?page=' . $page . '">' . $page. '</a>';
}

1 个答案:

答案 0 :(得分:0)

我不确定你使用“,”是什么意思,但是:

  1. LIMIT应该是10 - 即$ results_per_page(你的常数)

  2. OFFSET应该是动态的,具体取决于您所在的页面。在第1页上,OFFSET = 0(如果需要,您可以在第1页上省略OFFSET)。在第2页,示例中的OFFSET应为10.

  3. 您的ORDER BY子句在哪里?为LIMIT / OFFSET一致地工作这一点非常重要。

  4. 我不确定这是否是您的最终生产代码,但只是旁注:在生产中,永远不要在查询中直接使用$ _GET。您现在还不是,但是根据您对上述内容的处理方式,请确保在对其执行任何操作之前验证$ _GET参数是否为整数,以防止SQL注入。

相关问题