7

Is there a built-in function in PHP or MySQL that will provide the total number of MySQL queries used on a page? I've seen on a lot of sites (mainly forums) they have a message at the bottom saying something like "Page generated in 0.6 seconds with 20 queries".

If there's nothing built in then I'll add something to my database class to count them, but it seems like the kind of functionality that would already be available.

4

4 に答える 4

7

オプション 1 は、ラッパーを介してすべてのクエリを渡すことです。

function custom_mysql_query($sql)
{
    $GLOBAL['query_count'] ++;
    return mysql_query($sql);
}

これは説明のみを目的としており、エラー処理などは含まれていないことに注意してください。

実行されたクエリの数について MySQL をクエリできます。

mysql> SHOW STATUS LIKE 'Com_select';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select    | 2     | 
+---------------+-------+
1 row in set (0.00 sec)

次のようなことをしたいかもしれません:

SHOW STATUS LIKE 'Com_%';

次に、Com_select、Com_update、Com_insert、および Com_delete を一緒に追加します

于 2009-05-06T16:39:56.547 に答える
4

私がしていることは、カウントする sql クエリ クラスを作成することです。クラス内のクエリ メソッドが実行されるたびに、querycount という変数に 1 が追加されます。これにより、累計が得られます。

于 2009-05-06T16:31:50.297 に答える
3

PHP のネイティブ mysql/mysqli 拡張機能には何も組み込まれていません。DB 抽象化レイヤーを使用している場合は、その情報を提供する何らかのタイプの分析/ベンチマークが組み込まれている可能性があります。

ちなみに、 KohanaがProfilerライブラリを使用してこれを行っていることは知っています。ほとんどのフレームワークの DB ライブラリは、似たようなことをしていると思います。

サード パーティのフレームワークやデータベース抽象化レイヤーの使用をためらっている場合は、PHP5 の組み込みPDOクラスを単純にサブクラス化するだけで成功しました。基本的なベンチマーク情報とクエリ数を追加して、query()またはexecute()呼び出しを親クラスに渡すことができます。

于 2009-05-06T16:29:53.420 に答える
2

グローバルを回避するために、dbクラスで次のようにします。

class db {
    public static $query_count = 0;

    public static function query($str) { 
        self::$query_count++;
        // your db query method here
    }
}

次に、次のように静的クエリカウントにアクセスします。

<?= db::$query_count ?>
于 2012-06-01T17:00:08.363 に答える