【问题标题】:PHP Sqlsrv PaginationPHP Sqlsrv 分页
【发布时间】:2013-09-05 04:14:45
【问题描述】:

我在进行查询时遇到问题,它返回大约 30 页,我希望它返回 1,2,3...,30 而不是 1,2,3 ,4,5,6,7,8 等请参阅下面的代码,了解我使用过的代码:

function getPage($stmt, $pageNum, $rowsPerPage)
{
$offset = ($pageNum - 1) * $rowsPerPage;
$rows = array();
$i = 0;
while(($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC, 
     SQLSRV_SCROLL_ABSOLUTE,         $offset + $i)) && $i < $rowsPerPage)
{
    array_push($rows, $row);
    $i++;
}
return $rows;
}

// Set the number of rows to be returned on a page.
$rowsPerPage = 30;

// Connect to the server.
$serverName = 'test';
$connOptions = array("Database"=>"test");
$conn = sqlsrv_connect($serverName, $connOptions);
if (!$conn)
die( print_r( sqlsrv_errors(), true));

//  Define and execute the query.  
// Note that the query is executed with a "scrollable" cursor.
$sql = "select * from info";

$stmt = sqlsrv_query($conn, $sql, array(), array( "Scrollable" => 'static' ));
if ( !$stmt )
die( print_r( sqlsrv_errors(), true));

// Display the selected page of data.
echo "<table border='1px' align='center'>";
$pageNum = isset($_GET['pageNum']) ? $_GET['pageNum'] : 1;
$page = getPage($stmt, $pageNum, $rowsPerPage);

foreach($page as $row)
echo "<tr><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td><td>$row[3]</td></tr>";

echo "</table>";
?>
<table align='center'>
<?php
// Get the total number of rows returned by the query.
// Display links to "pages" of rows.
$rowsReturned = sqlsrv_num_rows($stmt);
if($rowsReturned === false)
die( print_r( sqlsrv_errors(), true));
elseif($rowsReturned == 0)
{
echo "No rows returned.";
exit();
}
else
{     
// Display page links.
$numOfPages = ceil($rowsReturned/$rowsPerPage);
for($i = 1; $i<=$numOfPages; $i++)
{
    $pageLink = "?pageNum=$i";
    print("<a href=$pageLink>$i</a>&nbsp;&nbsp;");
}
echo "<br/><br/>";
} 



sqlsrv_close( $conn );

【问题讨论】:

  • 我认为这个问题更适合代码审查堆栈交换,因为人们可以在那里评论您的代码并提出改进建议:codereview.stackexchange.com
  • 我已将此问题添加到建议的论坛,但已收到通知,它不适合该网站。
  • 是的,我看到它在那里被搁置了,但我相信这里或代码审查堆栈交换中可能还有其他类似的问题。你只需要搜索它。
  • 看看这是否有帮助:papermashup.com/easy-php-pagination 您可能需要根据您的需要自定义该代码。
  • Maximus2012,感谢您的帮助,我非常感谢,不幸的是,您发送给我的链接是为 mysql 编写的,但我使用的是 sqlsrv 并且两者之间有许多不同的语法,因为我们不能使用“LIMIT x , y "在 sql 查询中,我不确定是否有替代方法,我现在使用的代码实际上来自 "blogs.msdn.com/b/brian_swan/archive/2011/01/26/…",希望我能用 sqlsrv 找到一些东西。 @Maximus2012

标签: php sql pagination sqlsrv


【解决方案1】:

我进行了代码审查,JohnMark13 帮助我找到了解决这个问题的方法:

// Display page links.
$numOfPages = ceil($rowsReturned/$rowsPerPage);
$renderedEllipses = false;
for($i = 1; $i<=$numOfPages; $i++)
{
    //If you always want to render pages 1 - 3
    if($i < 4) {
        //render link
        $pageLink = "?pageNum=$i";
        print("<a href=$pageLink>$i</a>&nbsp;&nbsp;");
    }

    //If you always want to render current page number
    else if($i == $pageNum) {
        //render link
        $pageLink = "?pageNum=$i";
        print("<a href=$pageLink>$i</a>&nbsp;&nbsp;");
        //reset ellipses
        $renderedEllipses = false;
    }

    //if you always want the last page number
    else if ($i == $numOfPages - 1) {
        //render link
        $pageLink = "?pageNum=$i";
        print("<a href=$pageLink>$i</a>&nbsp;&nbsp;");
    }

    //make sure you only do this once per ellipses group
    else {
         if (!$renderedEllipses){
             print("...");
             $renderedEllipses = true;
         }
     }
}

感谢@JohnMark13

【讨论】:

  • 伙计们,我遇到了这段代码的问题,但不是同样的问题,更多的是搜索,不确定是打开另一个问题还是继续使用相同的代码,有人可以建议: ) - @JohnMark13
猜你喜欢
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多