在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();

phalcon mysql in_phalcon:跟踪sql语句相关推荐

  1. ef mysql跟踪sql语句_EF Core 日志跟踪sql语句

    EF Core 日志跟踪sql语句 1.新增自定义ILoggerProvider实现类 public class EFLoggerProvider : ILoggerProvider { public ...

  2. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  3. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  4. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例

    这篇文章主要为大家详细介绍了PHP 连接MySQL数据库的SQL语句的简单示例,具有一定的参考价值,可以用来参考一下. 首先用phpmyadmin进入建立数据库user 再建个三段的表admin 再别 ...

  5. 1.MySQL数据库 2.SQL语句

    01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...

  6. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  7. MySQL数据库的SQL语句

    MySQL数据库的SQL语句 MySQL的常用数据类型 MySQL数据类型及含义 char与varchar的区别 MySQL的基本命令 登录数据库 查看MySQL数据库版本 查看当前服务器中的数据库 ...

  8. MySQL数据库高级SQL语句(三)

    MySQL数据库高级SQL语句 SELECT TRIM 连接查询 CREATE VIEW UNION 交集值 无交集值 CASE SELECT TRIM SELECT TRIM (位置 '想移除掉的字 ...

  9. oracle 10046事件查看,使用oracle的10046事件跟踪SQL语句

    使用oracle的10046事件跟踪SQL语句 我们在分析应用程序性能问题的时候,更多地需要关注其中SQL语句 的执行情况,因为通常应用程序的性能瓶颈会在数据库这边,因此数据库的sql语句是我们优化的 ...

  10. mysql怎么写sql语句_Navicat如何写sql语句

    sql是操作数据库中数据的语句,在不同的数据库中会略有不同.Navicat for MySQL是一款很方便的MySQL客户端工具,能够很好的提供操作数据库可视界面,在同类型的软件中,占有极高的市场份额 ...

最新文章

  1. 用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
  2. UNIX网络编程——客户/服务器程序设计示范(一)
  3. Js:DOM对象操作常用的方法和属性
  4. 一文彻底搞懂快速幂(原理、实现、矩阵快速幂)
  5. mysql数据库内置函数大全_MySQL数据库——内置函数
  6. 8分钟学会Consul集群搭建及微服务概念
  7. sql优化技巧_使用这些查询优化技巧成为SQL向导
  8. CSDN中使用编辑器空格
  9. php session实现原理
  10. python开发环境anaconda3_使用Anaconda3配置多版本Python虚拟开发环境
  11. 208个地级市和31个省市城乡泰尔指数(2010-2019年)
  12. Linux运维基础软件
  13. java 类名_Java类的命名规则是什么
  14. c语言码流文件,视频文件大小的计算以及视频在网络上的传输(KB、kb、GB、kbps码率)...
  15. python中next是什么意思_Python代码中next()函数具有哪些功能呢?
  16. 自动驾驶轨迹规划--算法综述
  17. 企业经营中的“细节杀”:无线AP让你比别人更快一步
  18. 电脑作为文件服务器,把电脑做成一个云文件服务器
  19. SM-G9008V Root,google框架安装 设置开发者模式
  20. 图片直接引入base64格式的

热门文章

  1. 语音合成(TTS)论文优选:Forward Attention in Sequence- To-Sequence Acoustic Modeling for Speech Synthesis
  2. 纪念我的小宝贝——浪浪
  3. uni-app设置背景图片,backgroundImage
  4. 微信APP退款功能开发
  5. Photoshop-图层相关概念-LayerComp-Layers-移动旋转复制图层-复合图层
  6. java8 Stream详解
  7. 区块链最可能大规模应用场景:社交网络和共享经济
  8. 单例模式只会懒汉饿汉?读完本篇让你面试疯狂加分
  9. UnFlow:具有双向普查损失的光流的无监督学习
  10. 无线路由器设置里的DHCP服务是什么意思