php zend db profiler按表名过滤

时间:2011-09-19 16:23:47

标签: php zend-db-profiler

有没有办法按zend db profiler中的表名过滤查询?文档没有任何东西,但我不知道我是否可以完全依赖这个文件..如果你知道一种方法,请指教..

1 个答案:

答案 0 :(得分:1)

目前没有办法根据表名过滤分析器,只能通过查询类型(INSERT,UPDATE等)或查询的已用时间来过滤。

以下是您可以尝试的一些代码,可以帮助您按照自己的意愿行事,请注意,我还没有测试过,但希望它可以帮助您入门。

基本上,它循环遍历每个被分析的查询,并使用preg_match查看查询是否是您的表,如果不是,则取消设置查询信息并继续,如果是,则更新一些统计信息。在foreach的末尾,$ queries应该只是对要分析的表的查询。

    <?php
    $tableName = 'my_table';

    /** var $profiler Zend_Db_Profiler */
    $profiler  = $db->getProfiler();

    $queries   = $profiler->getQueryProfiles();

    $totalQueries   = 0;
    $totalTime      = 0;

    if ($queries !== false) {
        foreach ($queries as $index => $query) {
            $queryString = $query->getQuery();

            $t = preg_quote($tableName);

            if (!preg_match("/UPDATE .?$t.? /i", $queryString) ||
                !preg_match("/INSERT INTO .?$t.?/i", $queryString) ||
                !preg_match("/DELETE FROM .?$t.?/i", $queryString) ||
                !preg_match("/REPLACE .*?INTO .?$t.?/i", $queryString) ||
            ) {
                unset($queries[$index]);
                continue;
            }

            $totalQueries++;
            $totalTime += $query->getElapsedSecs();
        }
    }