单个帖子 MsSQL 和 PHP 的分页和查询字符串


Paging and query string for individual post MsSQL & PHP

我写了一个分页脚本来分页我博客中的所有帖子。现在我想创建和端点,这样我就可以去mydomain/index.php?blogID1mydomain/index.php?blogID2mydomain/index.php?blogID3mydomain/index.php?blogID4等。

鉴于我当前的脚本,我在哪里可以阅读有关执行此操作的信息,以及如何以最简单的方式实现它:

<?php
        $rowsPerPage = 2;
        try
        {
            $conn = new PDO( "sqlsrv:server=localhost ; Database=blog", "******", "*******");
            $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        }
        catch(Exception $e)
        { 
            die( print_r( $e->getMessage() ) ); 
        }
        try
        {
            $tsql = "SELECT COUNT(blogID) FROM blog_posts";
            $stmt = $conn->query($tsql);
            $rowsReturned = $stmt->fetch(PDO::FETCH_NUM);
            if($rowsReturned[0] == 0)
            {
                echo "No rows returned.";
            }
            else
            {     
                $numOfPages = ceil($rowsReturned[0]/$rowsPerPage);  
                for($i = 1; $i<=$numOfPages; $i++)     
                {
                    $pageNum = "index.php?pageNum=$i";
                    print("<a href='$pageNum' class='btn btn-primary active btn-sm'>$i</a>&nbsp;&nbsp;");
                }
            }
            $tsql = "SELECT * FROM 
            (SELECT ROW_NUMBER() OVER(ORDER BY blogID DESC) 
               AS RowNumber,
               blog_title,    
               blog_post,
               blog_author,
               blog_category,
               blog_date,
               blogID
               FROM blog_posts)
AS Temp
WHERE RowNumber BETWEEN ? AND ?";
$stmt2 = $conn->prepare($tsql);
if(isset($_GET['pageNum']))
{
$highRowNum = $_GET['pageNum'] * $rowsPerPage;
$lowRowNum = $highRowNum - $rowsPerPage + 1;
}
else
{
$lowRowNum = 1; 
$highRowNum = $rowsPerPage; 
}
$params = array(&$lowRowNum, &$highRowNum);
$stmt2->execute(array($lowRowNum, $highRowNum));
while($row = $stmt2->fetch(PDO::FETCH_NUM) )
{
echo   "$row[1]"; 
echo   "$row[2]";
echo   "$row[3]"; 
echo   date_format( new DateTime($row['5']), 'd M Y, H:i' ); 
echo  "$row[4]"; 
echo  "$row[6]";
}
}
catch(Exception $e)
{ 
die( print_r( $e->getMessage() ) ); 
}
?>

行是帖子吗?您可以按任何列对行进行排序,然后限制结果数并根据请求的页面设置偏移量。以下是关于 mysql 的端点:MySQL 数据 - 实现分页的最佳方式?

例如,如果像这样请求页面:index.php?pageNum=15,并且您每页显示 5 个帖子,用$page = $_GET['pageNum']获取该值,并为结果编号和偏移量 (LIMIT) 设置 PDO 准备语句。

声明$resultsPerPage = 5

SELECT * 
FROM Posts
LIMIT :offset, :maxResults 

并推入那些准备好的声明:

  • 偏移量 --> ($page - 1) * $resultsPerPage
  • 最大结果 --> $resultsPerPage