php - 使用 mysql_data_seek 进行分页的问题

标签 php mysql pagination

我在分页中使用函数 mysql_data_seek() 时遇到了问题。在点击链接时没有问题,但是在点击分页链接的最后一页时,就出现了这样的错误:

警告:mysql_data_seek() [function.mysql-data-seek]:偏移量 14 对于 MySQL 结果索引 6 无效(或查询数据未缓冲)

我的代码如下:

      $rpp = 3; 
      $adjacents = 4;
      $page = (!empty($_GET["page"]) ? intval($_GET["page"]) : 1);
    if($page<=0) $page = 1;
        $reload = $_SERVER['PHP_SELF'];
        $sql = "SELECT * FROM ".TABLE_IMAGE." ORDER BY id ASC";
        $qry = mysql_query($sql, $con);
        $tcount = mysql_num_rows($qry);
        $tpages = ($tcount) ? ceil($tcount/$rpp) : 1; 
                $i = 1;
        $count = 0;
        $j = ($page-1)*$rpp;
        while(($result = mysql_fetch_array($qry)) && (($count<$rpp) && ($j<=$tcount))){                                                            mysql_data_seek($qry,$j);
                $id = $result['id'];
        $img = $result['path'];
        $title = $result['title'];
        $detail = $result['detail'];
        $priority = $result['priority'];
        $active = $result['isActive'];                      
?><div id="block-image-slider"  class="<?php echo(($i%2==0)?'even':'odd')?>">
     <h2><?php echo $title ?></h2><span class="operation">[<a href="?action=edit&section=slider&id=<?php echo $id ?>">កែប្រែ</a>|<a href="?action=delete&section=slider&id='<?php echo $id ?>'">លុប</a>]</span>
            <div class="block-slider-image-body">
                <div class="left">
                     <ul>
                         <li>លេខរៀងទី<span class="space"><?php echo $id ?></span></li>
                         <li>កំនត់អទិភាពទី<span class="space"><?php echo $priority ?></span></li>
                         <li>ត្រូវបានបង្ហាញអោយឃើញ<span class="space"><?php echo (($active==1)?'បង្ហាញ':'មិនបង្ហាញ')?></span></li>
                         <li>អត្ថបទពេញ<div class="detail"><?php echo $detail ?></div></li>
                     </ul>
                </div>
             <div class="right">
          <img src="<?php echo '../../image/Slider/'.$img ?>" alt="<?php echo $title ?>" width="170" height="100" />
  </div>
 <div style="clear:both;"></div>
 </div>
</div>
 <?php
    $j++;
    $count++;
    $i++;
}
  include("../include/paginate.php");
  echo paginate_three($reload, $page, $tpages, $adjacents);

这是paginate.php代码

<?php 
     function paginate_three($reload, $page, $tpages, $adjacents) {
    $prevlabel = "&lsaquo; Prev";
    $nextlabel = "Next &rsaquo;";

    $out = "<div class=\"pagin\">\n";

    // previous
    if($page==1) {
        $out.= "<span>" . $prevlabel . "</span>\n";
    }
    elseif($page==2) {
        $out.= "<a href=\"" . $reload . "\">" . $prevlabel . "</a>\n";
    }
    else {
        $out.= "<a href=\"" . $reload . "?action=slider&page=" . ($page-1) . "\">" . $prevlabel . "</a>\n";
    }

    // first
    if($page>($adjacents+1)) {
        $out.= "<a href=\"" . $reload . "\">1</a>\n";
    }

    // interval
    if($page>($adjacents+2)) {
        $out.= "...\n";
    }

    // pages
    $pmin = ($page>$adjacents) ? ($page-$adjacents) : 1;
    $pmax = ($page<($tpages-$adjacents)) ? ($page+$adjacents) : $tpages;
    for($i=$pmin; $i<=$pmax; $i++) {
        if($i==$page) {
            $out.= "<span class=\"current\">" . $i . "</span>\n";
        }
        elseif($i==1) {
            $out.= "<a href=\"" . $reload . "?action=slider\">" . $i . "</a>\n";
        }
        else {
            $out.= "<a href=\"" . $reload . "?action=slider&page=" . $i . "\">" . $i . "</a>\n";
        }
    }

    // interval
    if($page<($tpages-$adjacents-1)) {
        $out.= "...\n";
    }

    // last
    if($page<($tpages-$adjacents)) {
        $out.= "<a href=\"" . $reload . "?action=slider&page=" . $tpages . "\">" . $tpages . "</a>\n";
    }

    // next
    if($page<$tpages) {
        $out.= "<a href=\"" . $reload . "?action=slider&page=" . ($page+1) . "\">" . $nextlabel . "</a>\n";
    }
    else {
        $out.= "<span>" . $nextlabel . "</span>\n";
    }

    $out.= "</div>";

    return $out;
}

?>

PS:当点击分页按钮的最后一个链接时,会出现如上错误信息。此外,我不知道为什么我的数据库中的第一条记录总是显示在每一页中。任何帮助,将不胜感激。谢谢。

最佳答案

没有问题。当只有 6 行时,您请求第 14 行。

此外,我认为使用 LIMIT [from], [amount] 进行分页更有效。

关于php - 使用 mysql_data_seek 进行分页的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293595/

相关文章:

php - Genesis 子主题的自定义帖子类型分页

php - MySQL PHP 图表

MySQL:将数组输出为单独的行

c# - 在 Web Api 2 中向链接 header 添加分页

php - 无法使用php和ajax从数据库中获取数据

mysql - 尝试将转储文件恢复到 mysql docker 镜像时出错

javascript - 使用 Promise 调用分页 API

php - Magento 2 : category Url Rewrite to Cms page

php - 如何加密cookie中的session id?

php - 这个 PDO 代码有什么问题?