1

有没有办法在zend db profiler中按表名过滤查询?该文档没有任何内容,但我不知道我是否可以完全依赖该文档..如果您知道方法,请告知..

4

1 回答 1

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();
        }
    }
于 2011-09-19T17:21:34.620 回答