データベース クエリを実行するとき、場合によっては、特定のルールに従って結果をページに表示する必要があります。たとえば、クライアントの各ページに少量のデータのみを表示したい場合、ページ効果を実現しながらクエリ ページング表示機能を使用する必要があります。この記事では、PHP 開発言語のクエリ ページング機能に焦点を当て、その実装原理と手順を例を通して紹介します。
クエリ ページング表示の実装原理
クエリ ページング表示の実装原理は非常に単純で、クエリされたすべてのデータを特定のルールに従って並べ替え、それぞれに表示されるデータを制限できます。ページ数。クエリ結果をページ単位で表示します。アルゴリズムを使用して、データベース内のどのレコードを最初から最後まで表示する必要があるかを計算できます。
主な手順は次のとおりです:
1. レコードの総数を計算する: 通常、データベース内のすべてのレコード、つまりレコードの総数をクエリする必要があります。
2. 総ページ数の計算: 総レコード数と各ページに表示されるレコード数を比較することで、総ページ数を計算できます。総ページ数を各ページに表示されるレコード数で割った余りが 0 でない場合は、総ページ数を 1 増やす必要があります。
3. 現在のページのデータをクエリする: 現在のページでクエリするレコードの開始位置と終了位置を計算し、SQL ステートメントを使用してデータをクエリします。ただし、ここでの SQL ステートメントにはいくつかの変更が必要で、単純にすべてのレコードをクエリすることはできず、クエリ条件を追加し、クエリ結果の数を制限する必要があります。
4. ページング表示: ページページングコンポーネントを使用すると、ページング表示を簡単に実行できます。通常、ページング コンポーネントには、レコードの総数、現在のページ数、総ページ数などの情報が表示されます。同時に、別のページをクリックして、別のページ上のデータをクエリおよび表示することもできます。
コードの実装
これらの手順を実装するには、PHP 関数を使用してページングを処理する必要があります。通常、この関数は、レコードの総数、各ページに表示されるレコードの数、現在のページ番号など、いくつかの必要なパラメーターを受け取る必要があります。 Mysql データベースを例に挙げると、一般的な PHP ページング関数は次のとおりです。
function get_data($page_size,$sql,$conn){ global $start; if(!$page_size) $page_size = 10; $page = $_GET['page']?$_GET['page']:1; $start=($page-1)*$page_size; //这里是高亮应用,可以注释掉 $sql_limit = $sql." limit $start,$page_size"; //组合成一条完整的sql语句 $result = mysql_query($sql_limit,$conn); while($row = mysql_fetch_array($result)){ $data[] = $row; } return $data; }
上記の関数は主にクエリを実装し、ページごとの表示数、合計に基づいて表示する必要があるデータを返します。レコード数と現在のページ数。次に、お客様と協力して、ページング機能を含む PHP クエリ ページを実装します。
まず、データ ソースを構築する必要があります。ここでは、単純な学生テーブルを使用します (そのフィールドには、ID、名前、性別、年齢が含まれます):
CREATE TABLE `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `gender` enum('male','female') NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
次に、データを学生に挿入します。 table Medium:
INSERT INTO `students` (`id`, `name`, `gender`, `age`) VALUES (1, 'Tom', 'male', 19), (2, 'Lucy', 'female', 20), (3, 'Lily', 'female', 18), (4, 'Kevin', 'male', 19), (5, 'Steve', 'male', 21), (6, 'Tony', 'male', 20), (7, 'Henry', 'male', 20), (8, 'Alex', 'male', 18), (9, 'Sara', 'female', 21), (10, 'Lily', 'female', 20), (11, 'Michael', 'male', 19), (12, 'Paul', 'male', 22), (13, 'Elena', 'female', 18), (14, 'Jack', 'male', 21), (15, 'Bob', 'male', 19), (16, 'Sophie', 'female', 20), (17, 'Lisa', 'female', 21), (18, 'Lucas', 'male', 19), (19, 'Laura', 'female', 18), (20, 'John', 'male', 20);
次の 3 つのファイルを実装する必要があります:
- index.php. このファイルは、ページング プロセスの実際のキャリアです. ページング プロセスを処理する関数を呼び出す必要があり、関数の戻り値に基づいてデータ出力が行われます。
- page.class.php、このクラスは主にページング関数を実装します。これには、ページング オブジェクトを定義するときに渡す必要があるパラメーターと、ページングの計算に関連するコア関数が含まれます。
- db.class.php、このクラスは主にデータベース関連の操作をカプセル化して管理するために使用されます。
内容は次のとおりです。
index.php:
nbsp;html> <meta> <title>PHP分页查询 - 测试页面</title> <?php include("db.class.php"); //加载数据库操作类 include("page.class.php"); //加载分页类 $page = new page(); //初始化分页类 $db = new db("localhost","root","","test","$conn"); //连接数据库 $count = $db->query("SELECT count(*) FROM students"); //查询总记录数 $page->get_page($count,10); //调用分页方法,传入总记录数和每页显示记录数 $genders = array("male"=>"男性","female"=>"女性"); $results = $db->query("SELECT * FROM students {$page->limit}"); //获取当前页数据 foreach($results as $row){ //遍历数据并渲染页面 $gender = $genders[$row["gender"]]; echo $row["id"]." ".$row["name"]." ".$gender." ".$row["age"]."<br>"; } echo $page->display_pages(); //渲染分页组件 ?>
page.class.php:
<?php /** * PHP分页类 */ class page { public $total = 0; //总记录数 public $page_size = 10; //每页显示的记录数 public $cur_page = 1; //当前页数 public $cur_offset = 0; //当前偏移量 public $total_page = 0; //总页数 public $limit = "";//分页查询限制语句 public function __construct(){ $this->cur_page = isset($_GET['page'])? intval($_GET['page']):1; //获取当前页,默认为第一页 } /** * 生成分页显示代码 */ public function display_pages(){ $page_list = ""; $url_s = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?')?'':"?")."&page="; //上一页 if($this->cur_page>1){ $page_list.="<a>首页</a>"; $page_list.="<a>cur_page-1)."'>上一页</a>"; } //数字页码 for($i=1;$itotal_page;$i++){ if($i==$this->cur_page){ $page_list.="<span>".$i."</span>"; } else { $page_list.="<a>$i</a>"; } } //下一页 if($this->cur_pagetotal_page){ $page_list.="<a>cur_page+1)."'>下一页</a>"; $page_list.="<a>total_page}'>尾页</a>"; } $page_list.="共{$this->total_page}页,"; $page_list.=""; return $page_list; } /** * 计算分页相关参数 * @param int $count 总记录数 * @param int $page_size 每页显示记录数 */ public function get_page($count,$page_size){ $this->total = intval($count); //总记录数 $this->page_size = intval($page_size); //每页显示多少条 $this->total_page = ceil($this->total/$this->page_size); //总页数 $this->cur_page = min($this->total_page,max(1,intval($this->cur_page))); //当前页码 $this->cur_offset = ($this->cur_page-1)*$this->page_size; //当前查询的偏移量 $this->limit = " LIMIT {$this->cur_offset},{$this->page_size}"; //查询限制语句 } }
db.class.php :
<?php /** * 数据库操作类 */ class db { private $conn; public function __construct($db_host,$db_user,$db_pass,$db_name){ $this->conn = new mysqli($db_host,$db_user,$db_pass,$db_name); if(mysqli_connect_errno()) { exit("连接数据库失败!"); } $this->conn->query("SET NAMES 'utf8'"); } /** * mysql查询 */ public function query($sql){ $results = array(); $query = $this->conn->query($sql); if(!$query) return false; while($row = $query->fetch_array(MYSQLI_ASSOC)){ $results[] = $row; } return $results; } public function __destruct(){ $this->conn->close(); } }
ページング コードの実行手順は次のとおりです:
- まず、db.class.php を呼び出してデータベースへの接続を確立する必要があります。 query() メソッドによるクエリ レコードの総数;
- get_page() メソッドを呼び出して、表示される総ページ数を事前計算し、クエリ ステートメントで制限値を定義します。クエリの数と開始点を制限するには;
- レンダリング関数 display_pages() を使用して、ページング表示コンポーネントをレンダリングします。
以上がPHPでクエリページング表示機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版
中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
