簡體   English   中英

PHP PDO分頁foreach

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM