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 つの呼び出しだけで済み、どのドライバーでも簡単に実装できます。

データベースから、データ自体とレコードの総数が必要になります。

これらを取得するために、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. 1 ページに表示する行数を決定します。
  3. あなたがどのページにいるかを追跡します。
  4. LIMIT新しいページ要求ごとにデータベースから関連する行のみを取得できるように、mysqlの構文を理解してください。

ページネーションのチュートリアルこれは役に立ちます。

于 2013-08-27T08:23:07.680 に答える