【问题标题】:Paging and query string for individual post MsSQL & PHP单个帖子 MsSQL 和 PHP 的分页和查询字符串
【发布时间】:2016-03-03 17:26:55
【问题描述】:

我编写了一个分页脚本来分页我博客中的所有帖子。现在我想创建和端点,以便我可以转到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() ) ); 
}
?>

【问题讨论】:

  • 如果你在谷歌上搜索并尝试了一些东西会有所帮助。 SO 更多的是用于解决问题,而不是提供解决方案。
  • 嗨!欢迎来到 StackOverflow!不幸的是,您的问题读起来很像“请实现 x 功能”请求,这不适合 StackOverflow。请参考这个页面来学习如何写出超有效的问题! stackoverflow.com/help/mcve
  • @AleksanderLidtke 我已经做了很多谷歌搜索,但我不知道从哪里开始......我不想让任何人为我写这个,我只是想要一些正确的方向/一些提示我不知道任何人甚至可以编写基本的 html 代码我认为这是我获得一些体面指针的最佳选择

标签: php sql-server pdo query-string


【解决方案1】:

row 是帖子吗? 您可以按任何列对行进行排序,然后限制结果数量并根据请求的页面设置偏移量。 这里是关于 mysql 那个端点的:MySQL Data - Best way to implement paging?

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

声明$resultsPerPage = 5

SELECT * 
FROM Posts
LIMIT :offset, :maxResults 

并推送那些准备好的语句:

  • 偏移 --> ($page - 1) * $resultsPerPage
  • maxResults --> $resultsPerPage

【讨论】:

  • Okey,但这是否也适用于 Microsoft sql?分页部分按预期工作,我只想添加,以便我可以使用 mydomain/index.php?blogID1 之类的 url 转到每个单独的帖子。 $row[1] - [6] 基本上是一个帖子,其中 $row[1] 包含帖子的唯一 ID
  • 要获取单个帖子,请使用不同的 GET 密钥。喜欢 postID index.php?postID=83。然后,您可以检查 index.php 脚本是否设置了 pageNum 或 postID(例如:isset($_GET['postID'])),如果是,则仅显示单个帖子。
  • 对不起。限制不适用于 ms sql,但正如我所见,你做对了。只需在 php 脚本中使用这些变量并创建另一个查询,您将在其中传递请求的帖子 ID。
  • 感谢您的帮助,我很感激 :)
  • 没问题!如果这有助于解决您的问题,请将其标记为答案。谢谢!
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 2013-06-13
  • 2011-05-03
  • 2022-06-11
  • 1970-01-01
  • 2018-09-29
  • 2015-05-02
  • 1970-01-01
相关资源
最近更新 更多