Php 是否显示每页的特定行数?

Php 是否显示每页的特定行数?,php,mysql,Php,Mysql,我想显示每页记录的具体数量?下面的代码用于分页。我试图每页显示2条记录。它在第一页上成功地显示了两条记录。问题在下一页开始出现。目前我有10条记录。它将显示如下 第1页=2条记录 +---+---------+------------------+-------+ |No.| File ID | File Desc. |Status | +---+---------+------------------+-------+ |1 | 400/4 |

我想显示每页记录的具体数量?下面的代码用于分页。我试图每页显示2条记录。它在第一页上成功地显示了两条记录。问题在下一页开始出现。目前我有10条记录。它将显示如下

第1页=2条记录

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/4   | 1 - Test 1 400/4 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 5 - Test 5 400/1 |       |
    +---+---------+------------------+-------+
    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/1   | 2 - Test 2 400/1 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 1 - Test 1 400/1 |       |
    +---+---------+------------------+-------+
第2页=4条记录(第3页的2条记录+2条记录)

第3页=6条记录(第4页的2条记录+2条记录+5页的2条记录)

第4页=4条记录(第5页的2条记录+2条记录)

第5页=2条记录

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/4   | 1 - Test 1 400/4 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 5 - Test 5 400/1 |       |
    +---+---------+------------------+-------+
    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/1   | 2 - Test 2 400/1 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 1 - Test 1 400/1 |       |
    +---+---------+------------------+-------+
$num\u rows=mysqli\u num\u rows($query);
$per_page=2;//每页
$page=1;
如果(isset($_GET[“Page”]))
{
$page=$_GET[“page”];
}
$prev_page=$page-1;
$next_page=$page+1;
$row_start=($per_page*$page)-$per_page);
如果($num\u行$num\u行)
{
$row\u end=$num\u行;
}
下面是页码

Total <?php echo $num_rows;?> Record : <?php echo $num_pages;?> Page :
<?php
if($prev_page)
{
    echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$prev_page&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'><< Back</a> ";

}

for($i=1; $i<=$num_pages; $i++){
    if($i != $page)
    {
        echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'>$i</a> ]";

    }
    else
    {
        echo "<b> $i </b>";
    }
}
if($page!=$num_pages)
{
    echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$next_page&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'>Next>></a> ";

}
$dbConn = null;
?>
总记录:第页:

问题在于您没有在sql查询中更新起始值或偏移量。如果偏移量正确,它将只获取您需要的特定记录集。带偏移量的sql查询示例: 下面的SQL查询表示“仅返回2条记录,从记录1开始(偏移量0)”:

单击“下一页”时,应更新起始/偏移

$page=1;
$per_page = 2;
$offset=$page*$per_page; //2

$sql = "SELECT * FROM Orders LIMIT 2 OFFSET 2";
单击第三页时,代码将更新为

$page=2;
$per_page = 2;
$offset=$page*$per_page; //4

$sql = "SELECT * FROM Orders LIMIT 2 OFFSET 4";
等等

所以sql语句应该如下所示:

$sql = "SELECT * FROM Orders LIMIT $per_page OFFSET $offset";

您还可以使用较短的语法来实现相同的结果:

$sql = "SELECT * FROM Orders LIMIT $offset, $per_page"

你不能在会话中保存从数据库返回的数据并切掉你需要的部分吗

if(!isset($_SESSION['result'])){
    $_SESSION['result'] = // SQL query
}else{
    $page = $_GET['page'];
    $records = array_slice($_SESSION['result'], $page, 2);
 }
 //Output the records
这是一个粗略的想法。

使用GET传递页码并在会话中保存查询结果,这样您就不会在每次切换页面时调用数据库。

原因是您没有在SQL查询中更新起始值,请显示SQL查询以如下方式使用SQL查询:选择*from table LIMIT$row\u start$per\u page
$sql = "SELECT * FROM Orders LIMIT $per_page OFFSET $offset";
$sql = "SELECT * FROM Orders LIMIT $offset, $per_page"
if(!isset($_SESSION['result'])){
    $_SESSION['result'] = // SQL query
}else{
    $page = $_GET['page'];
    $records = array_slice($_SESSION['result'], $page, 2);
 }
 //Output the records