是否可以分析Zend_Table查询?

时间:2012-10-09 13:30:15

标签: zend-framework zend-db profiler zend-db-table

我正在寻找一种方法来分析由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)

我将不胜感激任何帮助。谢谢!

2 个答案:

答案 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部分