【问题标题】:PHP PDO pagination foreachPHP PDO 分页 foreach
【发布时间】:2023-03-15 23:30:02
【问题描述】:

我正在尝试为我的 PDO 查询创建分页。我想不通。我已经尝试过无数次谷歌搜索,但没有什么对我有用。 [我可能没有足够努力地搜索。我不确定]

这是我的代码:

$sql2 = "SELECT * FROM comments WHERE shown = '1'ORDER BY ID DESC";
$stm2 = $dbh->prepare($sql2);
$stm2->execute();
$nodes2= $stm2->fetchAll();

foreach ($nodes2 as $n1) {
echo "text";
}

我希望能够限制每页 10 个 cmets,并为页面使用 $_GET['PAGE']。

我尝试过的东西

$sql2 = "SELECT * FROM comments WHERE shown = '1'ORDER BY ID DESC";
$stm2 = $dbh->prepare($sql2);  
$stm2->execute();
$nodes2= $stm2->fetchAll();

$page_of_pagination = 1;
$chunked = array_chunk($nodes2->get_items(), 10); 
foreach ($chunked[$page_of_pagination] as $n1) {
 echo "text";
}

如果有人能帮忙,我很感激。

【问题讨论】:

  • PHP 使用哪种 DBMS?

标签: php mysql pdo pagination


【解决方案1】:

您需要限制正在执行的查询,从数据库中获取所有值,然后将结果限制为您想要的结果,这是一个糟糕的设计选择,因为它的效率非常低。

你需要这样做:

$page = (int)$_GET['PAGE']; // to prevent injection attacks or other issues
$rowsPerPage = 10;
$startLimit = ($page - 1) * $rowsPerPage; // -1 because you need to start from 0
$sql2 = "SELECT * FROM comments WHERE shown = '1' ORDER BY ID DESC LIMIT {$startLimit}, {$rowsPerPage}";

LIMIT 做了什么:

LIMIT 子句可用于限制 SELECT 语句返回的行数。 LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量

更多信息在这里:http://dev.mysql.com/doc/refman/5.7/en/select.html

然后您可以继续获取结果并显示它。

评论后编辑:

要显示所有页面,您需要知道有多少页面,因此您需要使用相同的过滤器计算 SELECT 语句,这意味着:

SELECT COUNT(*) as count FROM comments WHERE shown = '1'

将此计数存储在变量中。要获得页数,请将计数除以要显示的每页行数并向上取整:

$totalNumberOfPages = ceil($count / $rowsPerPage);

并显示它们:

foreach(range(1, $totalNumberOfPages) as $pageNumber) {
    echo '<a href="?page=' . $pageNumber . '">' . $pageNumber . '</a>';
}

【讨论】:

  • 非常感谢!正是我需要的!如果你也可以告诉我如何做分页数,是否有可能?
猜你喜欢
  • 2014-04-30
  • 2012-03-17
  • 2015-08-12
  • 1970-01-01
  • 2017-05-18
  • 2012-08-14
  • 1970-01-01
  • 2015-03-14
  • 2015-07-31
相关资源
最近更新 更多