PHP zend数据库分析器筛选表名


php zend db profiler filter by table name

是否有办法在zend db分析器中按表名过滤查询?文档没有任何内容,但我不知道我是否可以完全依赖这个文档如果你知道一个方法,请告诉我

目前没有办法根据表名来过滤分析器,只能根据查询类型(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();
        }
    }