0

我正在尝试在我的专辑脚本中实现一个简单的分页系统。我已经尝试了几件事,并在互联网上阅读了一些教程,但没有一个适合我?可能是因为我使用的是 PDO,并且所有教程都在 mysql 中。

谁能帮我一点忙?

<?php

$result = $pdo->prepare('SELECT * FROM album WHERE bla = :bla');

$result->execute(array(':bla'=> $bla));

$numrows = $result->rowCount();

if($numrows != 0){
    foreach ($result as $row) {

         echo '
                <div class="imgwrap">
                    <a href="show.php?photo='.$row['id'].'" title="'.$row['caption'].'"><img src="'.$row['location'].'" alt="'.$row['beschrijving'].'" /></a>
                </div>
            ';
    }   
}else{
    echo 'There are no images!';
}


?>

</div>
4

2 回答 2

2

事实上,数据库与分页算法关系不大。无论使用哪个数据库或数据库驱动程序,甚至根本不涉及数据库,这都是一样的。

如果你理解这个想法,特定的驱动程序将无关紧要。严格来说,数据库操作只需要 2 次调用,任何驱动程序都可以轻松实现。

从数据库中,我们将需要数据本身和记录总数。

为了获得这些,我们将使用两个 MySQL 特性:

  • SQL_CALC_FOUND_ROWS/FOUND_ROWS()获取总行数
  • LIMIT限制所选数据量的子句,

要显示页面链接,您需要知道当前页面和页面总数。

<?php
$per_page = 10;

//let's get the page number
$cur_page = 1;
if (isset($_GET['page']) && $_GET['page'] > 0) 
{
    $cur_page = $_GET['page'];
}

// then define starting record
$start = ($cur_page - 1) * $per_page;

//now let's get the data
$sql  = "SELECT SQL_CALC_FOUND_ROWS * FROM Board LIMIT ?, ?";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(1, $start,PDO::PARAM_INT);
$stmt->bindParam(2, $per_page,PDO::PARAM_INT);
$stmt->execute();
$data = $stmt->fetchAll();

//  and total number of rows
$stmt = $pdo->query("SELECT FOUND_ROWS()");
$rows = $stmt->fetchColumn();

// here we calculate number of pages.
$num_pages = ceil($rows / $per_page);

//we have to define this variable to display list of pages
$page = 0;
include 'template.tpl.php';

现在,一旦我们准备好所有数据,就可以使用原生 PHP 作为模板将其发布:

Records found: <b><?=$rows?></b><br><br>
<? foreach ($data as $row): ?>
    <?=++$start?>. 
    <a href="?id=<?=$row['id']?>">
         <?=$row['title']?>
    </a>
    <br>
<? endforeach ?> 

<br>
Pages: 
<? while ($page++ < $num_pages): ?>
    <? if ($page == $cur_page): ?>
         <b><?=$page?></b>
    <? else: ?> 
        <a href="?page=<?=$page?>"><?=$page?></a>
    <? endif ?> 
<? endwhile ?> 

然而,这是最低限度的,包括没有像减少显示的页面数量和支持额外的 WHERE 参数这样的基本部分。

PDO 使它有点冗长 - 所以,最好让自己获得一些更复杂的驱动程序。

于 2013-08-27T08:27:29.997 回答
1

这是一个关于分页系统背后关键思想的合理教程。

基本概念与您用来访问数据库的 php/mysql 模块无关。

基本思想是:-

  1. 找出您必须在表格中显示的行数。
  2. 决定在页面上显示多少行。
  3. 跟踪您所在的页面。
  4. 了解LIMITmysql的语法,这样每次新的页面请求就可以只从数据库中获取相关的行。

分页教程这应该会有所帮助。

于 2013-08-27T08:23:07.680 回答