zoukankan      html  css  js  c++  java
  • phalcon:跟踪sql语句

    phalcon没有像yii那些框架一样内置trace工具,所以我们只能自己搞。

    在phalcon里有一个PhalconDbProfiler 类,这个类可以用来记录sql语句并计算消耗的时间。

    那么如何使用它呢?

    手册里其实已经提供了方法,总结如下:

    1.向$di里注册profiler服务

    $di->set('profiler', function(){
      return new PhalconDbProfiler();
    }, true);


    2.注册db服务时,顺便注册下事件
    $di->set('db', function() use ($di) {
    //新建一个事件管理器
    $eventsManager = new PhalconEventsManager();

    //从di中获取共享的profiler实例
    $profiler = $di->getProfiler();

    //监听所有的db事件
    $eventsManager->attach('db', function($event, $connection) use ($profiler) {
      //一条语句查询之前事件,profiler开始记录sql语句
      if ($event->getType() == 'beforeQuery') {
        $profiler->startProfile($connection->getSQLStatement());
      }
      //一条语句查询结束,结束本次记录,记录结果会保存在profiler对象中
      if ($event->getType() == 'afterQuery') {
        $profiler->stopProfile();
      }
    });

    $connection = new PhalconDbAdapterPdoMysql(array(
      "host" => "localhost",
      "username" => "root",
      "password" => "secret",
      "dbname" => "invo"
    ));

    //将事件管理器绑定到db实例中
    $connection->setEventsManager($eventsManager);

    return $connection;
    });


    3.程序中调出sql记录
    //执行一些查询
    Robots::find();
    Robots::find(array("order" => "name"));
    Robots::find(array("limit" => 30));

    //获取所有的prifler记录结果,这是一个数组,每条记录对应一个sql语句
    $profiles = $this->di->get('profiler')->getProfiles();
    //遍历输出
    foreach ($profiles as $profile) {
      echo "SQL语句: ", $profile->getSQLStatement(), " ";
      echo "开始时间: ", $profile->getInitialTime(), " ";
      echo "结束时间: ", $profile->getFinalTime(), " ";
      echo "消耗时间: ", $profile->getTotalElapsedSeconds(), " ";
    }

    //直接获取最后一条sql语句
    echo $this->di->get('profiler')->getLastProfile()->getSQLStatement();

  • 相关阅读:
    sizeof运算符介绍以及常见的坑
    程序员面试需要带身份证和毕业证原件吗
    CentOS7配置rsync实现文件同步
    CentOS7配置samba共享文件系统
    freecplus框架-字符串操作
    freecplus框架-文件操作
    freecplus框架-日志文件操作
    freecplus框架-日期、时间和计时器
    Unix 网络编程卷一源码编译踩坑记录 ubtutu 19.10
    实时人流量监测——海康威视sdk初体验
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8295262.html
Copyright © 2011-2022 走看看