0

我需要知道每个页面请求正在执行多少个 sql 查询。由于该站点已经完成并且我正在运行优化分析,如果提供的任何解决方案不需要我更改整个网站结构,我会更喜欢。

我使用单个连接将所有查询发送到 MySQL 数据库:

define('DATABASE_SERVER', '127.0.0.1');
define('DATABASE_NAME', 'foco');
define('DATABASE_USERNAME', 'root');
define('DATABASE_PASSWORD', '');

$DB_CONNECTION = new mysqli(
    DATABASE_SERVER,
    DATABASE_USERNAME,
    DATABASE_PASSWORD,
    DATABASE_NAME,
    3306
);

然后执行我使用的查询:

$query = "SELECT * FROM `sometable`";
$queryRun = $DB_CONNECTION->query($query);

有没有办法在 php 关闭连接之前计算已发送多少查询并将答案记录在文本文件中?

4

4 回答 4

4

您可以扩展 mysqli 对象并覆盖查询方法:

class logging_mysqli extends mysqli {
    public $count = 0;
    public function query($sql) {
        $this->count++;
        return parent::query($sql);
    }
}

$DB_CONNECTION = new logging_mysqli(...);
于 2012-10-22T10:35:53.813 回答
1

最好的方法之一是在你的$DB_CONNECTION->query().

这样,您可以将每个单独的查询记录到数据库表中,或者对查询速度执行基本测试然后存储它,或者只是增加计数(对于查询数)并存储它。

于 2012-10-22T10:34:42.093 回答
0

创建类扩展mysqli,创建该类的 $DB_CONNECTION 对象并在方法的实现中进行统计query()。最终它会要求parent::query()做真正的工作。

于 2012-10-22T10:36:05.407 回答
0

创建一个您使用的代理,而不是直接使用 mysqli...

class DatabaseCounter {
    private $querycount = 0;
    private $mysqli = null;

    // create mysqli in here in constructor


    public function query(...) {
        $this->queryCount++;
        $this->mysqli->query(...);
    }
}

$DB_CONNECTION = new DatabaseCounter();
于 2012-10-22T10:38:38.323 回答