有没有办法在zend db profiler中按表名过滤查询?该文档没有任何内容,但我不知道我是否可以完全依赖该文档..如果您知道方法,请告知..
问问题
239 次
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 回答