php+sqlserver實現分頁效果


找了一些實現的代碼,都或多或少有點問題。

主要問題在於:

  1. 在進行一頁數據查詢時的sql語句格式問題,
    • 開始嘗試使用limit關鍵字查詢,錯誤,limit用於mysql;
    • 接着使用ROWNUM、row_number(),有的博客寫這兩個方法是oracle和sqlserver公用的,但測試失敗;
    • 最后用top 和 not in關鍵字做查詢。
  2. 解決這個問題之后,發現sqlsrv_num_rows()函數報錯,參考sqlsrv驅動API文檔發現:

  

  

<?php
$page=$_GET["page"]+0;  
$page= $page<=0 ? 1 : $page;  //避免$_GET["page"]為負數和0的情況

//分頁尺寸
$page_size=30;
$sql1 = sqlsrv_query($conn, $sql, array(), array( "Scrollable" => 'static' ));
$rows = sqlsrv_has_rows($sql1);

//計算總行數
$total_records=sqlsrv_num_rows( $sql1 );


//總頁數
$total_page=ceil($total_records/$page_size);  //進一法取整,避免最后一頁不滿$page_size,   

$page=$page>$total_page?$total_page:$page;  //避免$_GET["page"]大於總頁數

//翻頁鏈接開始
$page_link="";
if ($total_page>1)
{
$page_link="<a>一共{$total_page}頁</a>";
$page_link.="<a>當前第{$page}頁</a>";
$page_link.="<a href=?page=1>首頁</a>";

if ($page>1){
//頁碼大於1的時候,顯示上一頁翻頁鏈接
$pre_page=$page-1;
$page_link.="<a  href='?page=$pre_page'><<</a>";
}
//翻頁列表
for ($i=1;$i<=$total_page;$i++)
{
if ($i==$page)
{
//高亮當前頁頁碼
$page_link.="<a href='?page=$i' class='currentpage'>$i</a>";
}
else
{
$page_link.="<a href='?page=$i'>$i</a>";
}
}
//頁碼小於總頁數的時候顯示下一頁翻頁鏈接
$next_page=$page+1;
if($next_page<$total_page)
{
$page_link.="<a  href='?page={$next_page}'>>></a>";
}
$page_link.="<a  href='?page=$total_page'>最后一頁</a>";
}   
//輸出記錄 
$offset=($page-1)*$page_size;

$start = $offset;
$pagesize = $page_size;
$sqls = "select top $pagesize o.*from ($sql) as o where id not in(select top $start id  from ($sql) as oo order by id asc) order by id asc" ;
$rst_view = sqlsrv_query($conn, $sqls);
if( $rst_view === false)
{
   echo "Error in query preparation/execution.\n";
   die( print_r( sqlsrv_errors(), true));
}
                        
                        
while($row_show = sqlsrv_fetch_array($rst_view)){ 
?>                
<tr>
  <td><a href="#" onclick="javascript:Wopen=open('showinfo.php?id=<?php echo $row_show[1]; ?>','','height=720,width=620,scrollbars=no');"><?php echo $row_show[1]; ?></a></td>
  <td><?php echo $row_show[2]; ?></td>
  <td><?php echo $row_show[3]; ?></td>
  <td><?php echo $row_show[5]; ?></td>
  <td><?php echo $row_show[7]; ?></td>
  <td><?php echo $row_show[12]; ?></td>
</tr>
<?php                                          
}
}
?>
</tbody>
</table>
</div>
<?php
echo  "<div class='page'>$page_link</div>";
?>

解決問題過程中參考一下網頁:

求PHP+SQLServer的翻頁效果

Oracle、MySql、SQLServer 數據分頁查詢

sqlsrv_num_rows

Cursor Types (SQLSRV Driver)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM