我试图为我的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条评论,并为页面使用$ _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";
}
如果有人可以提供帮助,我很感激。
答案 0 :(得分:-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>';
}