• 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.
    ";
       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)

  • 相关阅读:
    创业指南:如何实现打工族的老板梦
    在C#中压缩解压缩文件(适合.Net1.x)
    35岁之前成功的12条黄金法则
    郑州DOTNET俱乐部《DotNet实战之旅》活动邀请
    1baiwan.com你能走多远?(原创,请任意转载,作者:小张.net)
    MongoDB实战开发 【零基础学习,附完整Asp.net示例】
    TFS2010强制撤签锁定项
    持续集成理论和实践的新进展
    JQuery最佳实践
    IE下实现全屏两方法
  • 原文地址:https://www.cnblogs.com/hhccdf/p/5505963.html
Copyright © 2020-2023  润新知