ホームページ バックエンド開発 PHPチュートリアル すべてのテーブルをクエリできる PHP の「一般的な」クエリ ページング クラス

すべてのテーブルをクエリできる PHP の「一般的な」クエリ ページング クラス

Jun 13, 2016 pm 01:06 PM
content echo gt offset this

すべてのテーブルをクエリできる PHP の「ユニバーサル」クエリ ページング クラス

すべてのテーブルをクエリできる「ユニバーサル」クエリ ページング クラス?
最近、すべてのテーブルをクエリできるクエリ ページング クラスを作成したいと思い立ちました。実際の開発では、結果セットのクエリやページングが最もよく使われるコードだと思いますが、テーブルの構造が多様であるため、コードの再利用率と保守性をできるだけ向上させたいと考えています。 ?
以下は私が書いたものです。より良い改善ができ、より多くのサポートが得られるかどうかを確認するために、ご指導とテストをお願いします。 ?
現在、単一のテーブルのみがサポートされており、結合クエリはサポートされていません。しかし、将来的にはそれをどのようにサポートするかを検討する可能性があります。 ?

コード:?

<?php 
/**************************************************************** 
这个类主要是解决针对很多表的简单数据查询,还在完善中。希望广大网友多提意见和建议。 

我的目的是开发出一个几乎可以适用于所有mysql表的查询并将结果集分页的类。 
可以自动识别查询中要显示的字段值。 

在此,特别声明,要感谢chinaunix的朋友,特别是PHP版的网友们长期以来给我的帮助。 
特别要提的是NightKids,一直以来,他都给了我无私的帮助,甚至是他的源代码。 

这个类可以被任何人自由引用,使用,修改。但请保留这段文字。 
使用这个类造成的一切损失,都与作者tonera无关。 

我还在考虑,对于一些复杂的联合查询,可以派生一个类,重新构造sql实现。 
这个类没有考虑更多的显示风格,你可以自己构造。 
*****************************************************************/ 
class browser{ 
    var $c_table;    //要查询的表名 
    var $c_rows;    //要显示的行数 
    var $c_lation;    //查询的条件 
    var $c_order;    //排序的条件 
    var $c_result;    //查询的数据连接句柄 
    var $c_query;    //最终构造的查询 
    var $c_found;    //结果集 
    var $c_error;    //错误收集器 
    var $c_offset;    //分页显示的偏移量 
    var $total;       //结果集的总数 

    //连接数据库 
    function connect(){ 
       include '../connect.inc.php'; 
       if ($connection==false){ 
          $this->c_error.="没有连接上数据库。
"; 
          exit; 
       } 
       $this->c_result=$connection; 
    } 

    //构造函数,初始化变量 
    function browser($tablename,$row,$sql,$lation,$orderby){ 
       $this->c_table=$tablename; 
       $this->c_rows=$row; 
       if(empty($this->c_offset)){ 
          $this->c_offset=0; 
       } 
       if (empty($tablename) or empty($row) or empty($sql)){ 
          $this->c_error="没有查询的表或没有批定显示多少行或没有查询语句
"; 
       } 
       $this->c_query=$sql; 
       if (!empty($lation)){ 
          $this->c_query.=" ".$lation; 
       } 
       if (!empty($orderby)){ 
          $this->c_query.=" ".$orderby; 
       } 
    } 

    //计算总页数 
    function TatolPage(){ 
       $sult=mysql_query("select count(*) as 'total_rows' from $this->c_table",$this->c_result); 
       if ($sult==false) { 
          $this->c_error.="计算结果集总数目的查询失败,请检查。
"; 
          exit; 
       } 
       $tempvar=mysql_fetch_array($sult); 
       $this->total=$tempvar[0]; 
    } 

    //查询得到结果集,存入数组c_found[][]中 
    function GetFound(){ 
       $sult=mysql_query($this->c_query,$this->c_result) or die(mysql_error()); 
       while ($found=mysql_fetch_array($sult)){ 
          $this->c_found[]=$found; 
       } 
    } 

    //查询数据,并将结果分页存入一个变量 
    function ShowTable(){ 

       $this->connect(); 
       $this->TatolPage(); 

       if (empty($_GET[offset])){ 
          $_GET[offset]=0; 
       } 
       $this->c_query.=" limit ".$_GET[offset].", ".$this->c_rows; 
       $sult=mysql_query($this->c_query,$this->c_result) or die(mysql_error()); 

       //解析query,得到要显示出来的字段值 
       $tempvar=explode(" ",$this->c_query); 
       $fields=explode(",",$tempvar[1]);    //字段值(数组) 

       //显示数据到一个表 
       $echo_content.="<table width=100% border=1>"; 
       while($found=@mysql_fetch_array($sult)){ 
          $echo_content.="<tr><td>"; 
          $echo_content.="<a href=newsshow.php?ID=".$found[0].">".$found[1]."</a></td>"; 
          //显示用户指定的字段,此处需仔细看 
          for($i=2;$i<count($fields);$i++){ 
             $echo_content.="<td>".$found[$i]."</td>"; 
          } 
          $echo_content.="</tr>"; 
       } 

       //分页 
       if ($this->c_rows==0){ 
          $this->c_error.="每页显示的数目不能为0"; 
          exit; 
       } 
       $total_page=ceil($this->total/$this->c_rows); 
       $pre_page=$_GET[offset]-$this->c_rows; 
       //下一页 
       $nex_page=$_GET[offset]+$this->c_rows; 
       //显示上一页 
       if ($pre_page>=0){ 
          $echo_content.="<tr><td colspan=10><a href=$PHP_SELF?offset=".$pre_page.">上页</a>&"; 
       }else{ 
          $echo_content.="<tr><td colspan=10>上页&"; 
       } 
       //显示页码 
       for($i=1;$i<=$total_page;$i++){ 
          if ($_GET[offset]/$this->c_rows==($i-1)){ 
             $echo_content.="&第".$i."页&"; 
          }else{ 
             $echo_content.="&<a href=$PHP_SELF?offset=".($i-1)*$this->c_rows.">".$i."</a>&"; 
          } 
       } 
       //显示下一页 
       if ($nex_page!=0 and ($_GET[offset]+$this->c_rows)<=$this->total){ 
          $echo_content.="&<a href= $PHP_SELF?offset=".$nex_page.">下页</a></td></tr>"; 
       }else{ 
          $echo_content.="&下页</td></tr>"; 
       } 
       $echo_content.="</table>"; 
       return $echo_content; 

    } 
} 

/*例子 
//browser("表名",每页显示的数目,"sql","查询条件","排序条件"); 
$gggg=new browser("news",5,"select auto_id,news_title from news","","order by newstime desc"); 

$temp=$gggg->ShowTable(); 
echo $temp; 

//$gggg->GetFound()是将查询结果集存在一个二维数组里,本例中没有用到。 
*/ 
?>
ログイン後にコピー
?

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト Jan 30, 2024 am 09:08 AM

今日の急速な技術発展の時代では、雨後の筍のようにプログラミング言語が出現しています。多くの注目を集めている言語の 1 つは Go 言語です。Go 言語は、そのシンプルさ、効率性、同時実行の安全性などの機能により多くの開発者に愛されています。 Go 言語は、多くの優れたオープンソース プロジェクトがある強力なエコシステムで知られています。この記事では、厳選された 5 つの Go 言語オープンソース プロジェクトを紹介し、読者を Go 言語オープンソース プロジェクトの世界へ導きます。 KubernetesKubernetes は、自動化されたオープンソースのコンテナ オーケストレーション エンジンです。

Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Mar 24, 2024 pm 01:15 PM

「Go 言語開発の要点: 5 つの人気フレームワークの推奨事項」 高速で効率的なプログラミング言語として、Go 言語はますます多くの開発者に好まれています。開発効率を向上させ、コード構造を最適化するために、多くの開発者はフレームワークを使用してアプリケーションを迅速に構築することを選択します。 Go 言語の世界には、選択できる優れたフレームワークが数多くあります。この記事では、5 つの人気のある Go 言語フレームワークを紹介し、読者がこれらのフレームワークをよりよく理解して使用できるように、具体的なコード例を示します。 1.GinGin は高速な軽量 Web フレームワークです。

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

Golang の Web フレームワーク Echo フレームワークを使用した分散タスク スケジューリングの実装 Golang の Web フレームワーク Echo フレームワークを使用した分散タスク スケジューリングの実装 Jun 24, 2023 am 11:49 AM

インターネットの発達や情報技術の進歩によりビッグデータの時代が到来し、データ分析や機械学習などの分野も広く活用されています。これらの分野では、タスクのスケジューリングは避けられない問題です。効率的なタスクのスケジューリングを実現する方法は、効率を向上させるために重要です。この記事では、Golang の Web フレームワーク Echo フレームワークを使用して分散タスク スケジューリングを実装する方法を紹介します。 1. Echo フレームワークの概要 Echo は、高性能、スケーラブル、軽量の GoWeb フレームワークです。 HTTPに基づいています

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Laravel 開発: Laravel Echo と Pusher を使用して WebSocket 通信を実装するにはどうすればよいですか? Laravel 開発: Laravel Echo と Pusher を使用して WebSocket 通信を実装するにはどうすればよいですか? Jun 13, 2023 pm 05:01 PM

Laravel は、拡張性と効率性に優れた人気の PHP フレームワークであり、開発者が高品質の Web アプリケーションを迅速に構築できる強力なツールとライブラリを多数提供しています。その中でも、LaravelEcho と Pusher は、WebSocket 通信を簡単に実装できる 2 つの非常に重要なツールであり、この記事では、Laravel アプリケーションでこれら 2 つのツールを使用する方法について詳しく説明します。 WebSocket とは何ですか? Webソケット

See all articles