[英]PHP PDO pagination foreach
我正在嘗試為我的PDO查詢創建分頁。 我不知道。 我已經嘗試了無數的Google搜索,但沒有任何一項對我有用。 [我可能搜索的不夠努力。 我不確定]
這是我的代碼:
$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";
}
如果有人可以幫忙,我會很感激。
您需要限制正在執行的查詢,從數據庫中獲取所有值,然后將結果限制為所需的值,這是一個錯誤的設計選擇,因為它效率極低。
您需要這樣做:
$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>';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.