博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
phalcon:跟踪sql语句
阅读量:6136 次
发布时间:2019-06-21

本文共 1683 字,大约阅读时间需要 5 分钟。

  hot3.png

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

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

那么如何使用它呢?

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

1.向$di里注册profiler服务

$di->set('profiler', function(){    return new \Phalcon\Db\Profiler();}, true);

2.注册db服务时,顺便注册下事件
$di->set('db', function() use ($di) {    //新建一个事件管理器    $eventsManager = new \Phalcon\Events\Manager();    //从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 \Phalcon\Db\Adapter\Pdo\Mysql(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(), "\n";   echo "开始时间: ", $profile->getInitialTime(), "\n";   echo "结束时间: ", $profile->getFinalTime(), "\n";   echo "消耗时间: ", $profile->getTotalElapsedSeconds(), "\n";}//直接获取最后一条sql语句echo $this->di->get('profiler')->getLastProfile()->getSQLStatement();

--完--

转载于:https://my.oschina.net/cxz001/blog/289776

你可能感兴趣的文章
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>