时间:2021-07-01 10:21:17 帮助过:2人阅读
在phalcon里有一个\Phalcon\Db\Profiler 类,这个类可以用来记录sql语句并计算消耗的时间。那么如何使用它呢?
手册里其实已经提供了方法,总结如下:
$di->set(‘profiler‘, function(){ return new\Phalcon\Db\Profiler(); }, true);
$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; });
//执行一些查询 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:跟踪sql语句
标签: