1

zend db プロファイラーでテーブル名でクエリをフィルタリングする方法はありますか? ドキュメントには何もありませんが、このドキュメントに完全に依存できるかどうかはわかりません..方法を知っている場合は、アドバイスしてください..

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 に答える