我正试图在相册脚本中实现一个简单的分页系统。我试过几种方法,在网上读过一些教程,但都不适合我?有问题,因为我使用的是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>
事实上,数据库与分页算法没有太大关系。无论使用哪个数据库或数据库驱动程序,或者根本不涉及数据库,都将是相同的。
如果您理解的想法,特定的驱动程序将无关紧要。严格来说,数据库操作只需要2次调用,任何驱动程序都可以轻松实现。
从数据库中,我们将需要数据本身和记录总数。
为了获得这些,我们将使用两个MySQL功能:
SQL_CALC_FOUND_ROWS
/FOUND_ROWS()
获取总行数- CCD_ 3子句来限制所选数据的数量
要显示指向页面的链接,您需要知道当前页面和页面总数。
<?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让它有点冗长——所以,最好给自己找一些更复杂的驱动程序。
以下是关于分页系统背后的关键思想的合理教程。
基本概念与用于访问数据库的php/mysql模块无关。
基本思想是:-
- 找出表中必须显示的行数
- 决定在一页上显示多少行
- 跟踪您所在的页面
- 了解mysql的
LIMIT
语法,这样您就可以在每个新的页面请求中只从数据库中获得相关的行
分页教程这应该会有所帮助。