很多博客软件都有这么一个功能,比如“生成本次页面一共花费了xx毫秒,进行了xx次数据库查询”等等。那么这个功能是如何实现的呢,下面我大概说下思路。

1. 在类的构造函数中声明全局变量

定义一个全局变量 $queries 用来统计页面生成经过的数据库查询次数

1 function __construct()
2 {
3     parent::__construct();
4     global $queries;
5 }

2. 修改数据库类中封装好的的 query()

你应该有用到数据库类吧,找到它封装 query() 的方法,比如下面的:

1 // 执行SQL语句
2 public function query($query)
3 {
4     //echo $query.'<br />';
5     ++$GLOBALS['queries'];
6     return $this->result = mysql_query($query$this->link);
7 }

那么每执行一次 Query,全局变量 queries 就会自增1。

3. 在方法体中这样写:

1 public function content($id = 0)
2 {
3     $GLOBALS['queries'] = 0;
4     // something to do
5     echo $GLOBALS['queries'];
6 }

就这么简单就能实现那个功能了。

4. 附带计算PHP脚本执行的函数

之前写的博文介绍了下计算PHP脚本执行时间的函数,这里再贴一下吧。

01 // 计时函数
02 public function runtime($mode = 0) {
03     static $t;
04     if(!$mode) {
05         $t = microtime();
06         return;
07     }
08     $t1 = microtime();
09     //list($m0,$s0) = split(" ",$t);
10     list($m0,$s0) = explode(" ",$t);
11     //list($m1,$s1) = split(" ",$t1);
12     list($m1,$s1) = explode(" ",$t1);
13     return sprintf("%.3f ms",($s1+$m1-$s0-$m0)*1000);
14 }

使用如下:

1 public function content($id = 0)
2 {
3     $this -> runtime();
4     $GLOBALS['queries'] = 0;
5     // something to do
6     echo $GLOBALS['queries'];
7     echo $this -> runtime(1);
8 }

PHP获取生成一个页面的数据库查询次数(转)的更多相关文章

  1. Java Web项目--使用Servlet生成一个页面

    为了生成一个servlet对应的网页.我们需要新建一个web.xml,其中将会放置servlet的相关信息.web.xml文件放置在WebContent/WEB-INF/目录下.(我们在Eclipe中 ...

  2. Java Web项目--使用JSP生成一个页面

    我们使用了servlet生成了一个网页,但是可以看到使用servlet生成网页必须将网页的内容全部嵌入到Java代码当中,不是很方便.所以有没有什么办法是将Java代码嵌入到html代码中,而不是像s ...

  3. 在layui中,新的页面怎么获取另一个页面传过来的数据,并可以对数据进行判断,layui中的后台分页(table)。

    例如:打开一个新页面的同时,传数据. layer.open({ type: 2, title: '新增项目', shadeClose: false, shade: [0.3], maxmin: tru ...

  4. JS标签获取另一个页面传过来的href值

    a href=b.html?id=楼主>B页面</a>b.html中的获取函数:function getParam(){C1=window.location.href.split(& ...

  5. 通过js根据后台数据动态生成一个页面

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExportSelField ...

  6. 给mysql添加一个只有某个数据库查询权限的用户

    添加用户: insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject) values ("1 ...

  7. .NET生成静态页面的方案总结

    转载自:http://www.cnblogs.com/cuihongyu3503319/archive/2012/12/06/2804233.html 方法一:在服务器上指定aspx网页,生成html ...

  8. 在小程序中修改上一个页面里data中的数据调用上一个页面的方法

    //获取已经打开的页面的数组 var pages = getCurrentPages(); //获取上一个页面的所有的方法和data中的数据  var lastpage = pages[pages.l ...

  9. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

随机推荐

  1. 用Apache Ivy实现项目里的依赖管理

    Apache Ivy是一个管理项目依赖的工具. 它与Maven  Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...

  2. C# 对类中的保护成员进行写操作(邀请大家拍砖)

    假如我有一个类库 Lib,提供一个类 ClassA 对外服务,ClassA 中有若干只读属性 PropA, PropB 等等,外部调用者无法对 ClassA 中的 PropA 和 PropB 进行写操 ...

  3. mysql 关键字bug

    今天运行语句 select * from order; 出现bug: ERROR 1064 (42000): You have an error in your SQL syntax; check t ...

  4. DIRECTORY_SEPARATOR的作用

    IRECTORY_SEPARATOR是php的内部常量,用于显示系统分隔符的命令,不需要任何定义与包含即可直接使用. 在windows下路径分隔符是/(当然/在部分系统上也是可以正常运行的),在lin ...

  5. display:table-cell的惊天作用,直接惊呆你!

    一 display:table-cell介绍 ... 二 用法 (1)高度不固定元素,垂直居中 ... (2)高度不固定列表元素,登高排列 ... (3)宽度不固定元素,平均分配 ...

  6. Ubuntu14.04安装PostpreSQL9.3.5记录

    安装参考:http://www.postgresql.org/download/linux/ubuntu/ y@y:~$ sudo apt-get install postgresql-9.3 pos ...

  7. TENX_ASM.uew

    /L14"TENX ASM" Nocase Line Comment = ; File Extensions = INC ASM LST H /Colors = ,,,,, /Co ...

  8. QWidget可以设置QStyle,它可以绘制很多东西(具体内容没研究,待续)

    QStyle * QWidget::style() const See also QWidget::setStyle(), QApplication::setStyle(), and QApplica ...

  9. ListView中分割线的设置

    1.在布局文件中ListView元素中通过属性设置 android:divider="#fffff" 分割线颜色 android:dividerHeight="1px&q ...

  10. Skulpt

    Skulpt Python. Client side. Skulpt is an entirely in-browser implementation of Python. No preprocess ...