我正在寻找一种方法来分析由Zend_Table在内部执行的查询 例如,在完成快速入门课程后,如何分析所有执行的查询? 我试过从application.ini启用探查器,如下所示:
resources.db.profiler.class = "Zend_Db_Profiler_Firebug"
resources.db.profiler.enabled = true
将下一行放在留言簿控制器中:
...
$db = Zend_Db_Table_Abstract::getDefaultAdapter();
$profiler = $db->getProfiler();
echo $profiler->getTotalElapsedSecs();
这给了我0
我还尝试在这样的Bootstrap文件中启用探查器:
protected function _initProfiler() {
$this->bootstrap("db");
$profiler = new Zend_Db_Profiler_Firebug("All DB Queries");
$profiler->setEnabled(true);
Zend_Registry::get("db")->setProfiler($profiler);
}
Whick没有给我任何结果(我已经使用Zend_Log_Writer_Firebug()安装并测试了Firebug和FirePHP)
我将不胜感激任何帮助。谢谢!
答案 0 :(得分:2)
我没有尝试过Firebug探查器。但我确实使用html表在每个查询页面底部输出分析器信息。
在application.ini中启用探查器
resources.db.params.profiler = true
在布局中渲染配置文件结果:
<?php
$this->addScriptPath(APPLICATION_PATH . '/views/scripts');
echo $this->render('profiler.phtml')
?>
profiler.phtml要渲染的视图
<?php
// get the default db adapter
$adapter = Zend_Db_Table::getDefaultAdapter();
$profiler = $adapter->getProfiler();
if ($profiler->getEnabled() && $profiler->getTotalNumQueries() > 0) :
?>
<div style='text-align:center'>
<h2>Database Profiling Report</h2>
<p>Total queries executed: <?php echo $profiler->getTotalNumQueries() ?></p>
<p>Total elapsed time: <?php echo $profiler->getTotalElapsedSecs() ?></p>
</div>
<table class='spreadsheet' cellpadding='0' cellspacing='0' style='margin:10px auto'>
<thead>
<tr>
<th>#</th>
<th>Query</th>
<th>Time</th>
</tr>
</thead>
<tbody>
<?php foreach ($profiler->getQueryProfiles() as $queryNumber => $query) : ?>
<tr>
<td>(<?php echo $queryNumber + 1 ?>)</td>
<td><?php echo $query->getQuery(); ?></td>
<td><?php echo $query->getElapsedSecs(); ?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
<?php endif ?>
我认为使用firebug profiler并不困难。
答案 1 :(得分:1)
问题出在参数实例化中。当我进入
resources.db.params.profiler.class = "Zend_Db_Profiler_Firebug"
resources.db.params.profiler.enabled = true
而不是以前的配置,一切都很顺利。 注意参数行的.params部分