【问题标题】:MySQL PHP Pagination - Getting the same results on every page or no results at all [duplicate]MySQL PHP分页 - 在每个页面上获得相同的结果或根本没有结果[重复]
【发布时间】:2017-11-14 20:08:30
【问题描述】:

我正在尝试从 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>';
}

【问题讨论】:

标签: php mysql pagination partition


【解决方案1】:

我不确定你所说的“,”是什么意思,但是:

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

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

  3. 您的 ORDER BY 子句在哪里?这样做对于 LIMIT/OFFSET 始终如一地工作很重要。

  4. 我不确定这是否是您的最终生产代码,但只是附注:在生产中,切勿在查询中直接使用 $_GET。您目前还没有,但根据您为上述几点所做的工作,请确保在对它进行任何操作之前验证您的 $_GET 参数是一个整数,以防止 SQL 注入。

    李>

【讨论】:

  • 我认为我的这部分代码会导致数据不断重复相同的值,无论页面是什么。它无法正确获取页面。
    // 确定访问者当前所在的页码 if (!isset($_GET["page"])) { $page = 1; } 其他 { $page = $_GET["page"]; } // 确定显示页面结果的 sql LIMIT 起始编号 $this_page_first_result = ($page-1)*$results_per_page;
  • 请参阅我的第 1 点,您是否将 LIMIT 设置为 $results_per_page?打印(调试)您的 SQL 以查看它是否正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2022-01-25
  • 2018-12-30
  • 2012-05-19
  • 2012-09-05
相关资源
最近更新 更多