デジットさんの生活便利サイトトップへ デジットさんのMDB2でページ分割(PHP)

トップページ > ホームページ作成 > MDB2でページ分割

PEARのDBクラス(MDB2)を利用して、データベースに接続しデータを分割して取得し表示する方法です。データベースのデータの量が多くなってきた時は必須の技術です。MySQL以外のデータベースにも汎用で使えますので、便利です。

PEARのDBクラス(MDB2)をつかってデータを分割取得する

PEARでMySQL表示の続きです。データベースにあるデータを全て表示しないで、指定したデータ数のみ分割して表示します。表示されなかったデータも、順次表示できるようにします。

MDB2を使ったMySQLからデータを分割し取得して表示する例

PEARでMySQL表示から変更したヶ所(赤い文字の所)のみ説明します。
ファイル名は、"dispdb_limit_pear.php"としました。
ポイントは、表示するデータ数「$lim」を基準に、最初のページを「0」としてページを割り振ります。表示しているページは、「$pg」で定義しています。表示するページは、「$pg」を引数として、自分のページを呼び出すことで行えます。
データベースの記録数は、「numRows()」で取得し、データベースから取得するデータの位置は、「setLimit($lim, ($pg * $lim))」で制限しました。
「$nxt」と「$befr」は、次のページと前のページをあらわしています。次と前のページがない場合は、リンクしないように工夫してあります。

<?php
//PEAR DBクラスモジュール(MDB2)をインクルード
require_once("MDB2.php");
//接続の設定(DBタイプ/サーバー/データベース/ユーザー/パスワード/テーブル)
$db_type = "mysql";//データベースの種類
$sv = "mysql**.lolipop.jp";//自分のサーバー名に書き換える
$db_name = "LA********";//自分のデータベース名に書き換える
$user = "LA********";//自分のIDに書き換える
$pass_w = "PW*****";//自分のパスワードに書き換える
$table = "db****";//使うテーブル名に書き換える
// 取り出して表示する最大レコード数
$lim = 3;
// 表示するページの位置
$pg = 0 + $_GET['pg'];//ページ取得の引数
//自分のページ
$thispg = 'dispdb_limit_pear.php';

//データベースに接続
$dsn = "$db_type://$user:$pass_w@$sv/$db_name";
$mdb2 =& MDB2::factory($dsn);
if (PEAR::isError($mdb2)){
die($mdb2->getMessage());//"接続エラー"
}
// データ行数を取得する(SELECT クエリの結果の行数)
$res =& $mdb2->query('SELECT * FROM '.$table);
if (PEAR::isError($res)){
die($res ->getMessage());//"接続エラー"
}
if ($mdb2->getOption('result_buffering')) {
$dtcnt = $res->numRows();//テーブルに記録された行数
} else {
echo '"result_buffering" が無効で行数が取得出来ない';
}

//データを取り出す
$result_types = true ;//配列を指定しないですべてのフィールドを取得('*' を使用)
$mdb2->loadModule('Extended');//autoPrepare() および autoExecute() を使用
// $pg*$lim 行目から始め、$lim 行読み込む
$mdb2->setLimit($lim, ($pg * $lim));

$res = $mdb2 -> extended-> autoExecute($table,null,MDB2_AUTOQUERY_SELECT,false,null,true,$result_types);

if (PEAR::isError($res)){
die($res->getMessage());//"接続エラー"
}
//次と前のページのリンク先計算
if ($dtcnt > (($pg+1) * $lim)){
$nxt = "<a href=\"" .$thispg. "?pg=" .($pg+1). "\">次の" .$lim. "件</a>";
} else {
$nxt = "このページが最終";
}
if ($pg > 0){
$befr = "<a href=\"" .$thispg. "?pg=" .($pg-1). "\">前の" .$lim. "件</a>";
} else {
$befr = "このページが最初";
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>データベース表示(サンプル)</title>
</head>
<body>
<p>
<?php echo $befr ?> <?php echo $nxt ?>
</p>

<table border="1">
<tr>
<td>名前</td><td>英語</td><td>E-mail</td><td>コメント</td>
</tr>
<?php
//一行づつ行がなくなるまで取得 コールのたびにフェッチモードを設定
while ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)){
echo "<tr>";
echo "<td>" .$row["name"]. "</td>";
echo "<td>" .$row["ename"]. "</td>";
echo "<td>" .$row["email"]. "</td>";
echo "<td>" .$row["comment"]. "</td>";
echo "</tr>";
}
?>
</table>
<?php
//切断
$mdb2 -> disconnect();
?>
</body>
</html>

これで、PEARのMDB2をつかってMySQLからの分割データ取得と表示が出来ました。
レンタルサーバーの「ロリポップ」で動作確認できています。

読取ったデータを表で表示した結果

MySQLデータ分割表示(最初のページ) MySQLデータ分割表示(途中のページ) MySQLデータ分割表示(最後のページ) 上のサンプルリストを実行した、結果の例です。
MySQLのデータが分割して取得され、結果を表にして表示しました。前と次のページへのリンクも、張られています。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

デジットさんのホームページ入門に移行中

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :8

とことん!ホームページホームページ入門役立つサイトデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2010 Copyright © Digit-01 All Rights Reserved.