5

在 CodeIgniter 中,我会这样做:

print_r ($this->db->queries);

在 Yii 我试过:

 print_r (Yii::app()->db)

但这没有显示任何查询。

更新:我理解我的问题:当我想在一个POST动作上显示数据库查询时,我不显示它。使用时GET,没问题。

4

3 回答 3

5

正如@bool.dev 所说,您可以使用CWebLogRoute或在我的情况下使用CFileLogRoute将这些查询存储在文件中。

array (
    'class'      => 'CFileLogRoute',
    'categories' => 'system.db.*',
    'logFile'    => 'sql.log',
),
于 2012-06-29T06:33:03.237 回答
0

为了补充@snippLeaf-com 的答案,您可以通过您想要的关键字跟踪此文件过滤,如下所示:

// filter by "INSERT" or "UPDATE"
$ tail -f /path_to/protected/runtime/sql.log |grep 'INSERT\|UPDATE'

// filter (case insensitive) by "SELECT" in table "x2_users"
$ tail -f /path_to/protected/runtime/sql.log |grep -i SELECT.*x2_users

OBS:要获取新数据,您可能需要刷新数据库缓存:

rm -f protected/runtime/cache/*.bin
于 2014-10-03T13:47:20.297 回答
0

如果你真的想在yii中记录每个查询,请使用yii db profiler扩展。

步骤 1从 -->链接下载扩展

步骤 2。解压到protected/extensions/

步骤 3。将文件夹名称重命名yii-db-profiler-masterdb_profiler

第四步。将以下内容更新为您的protected/config/main.php

<?php
return array(
    // …
    'components' => array(
        // …
        'db' => array(
            // …
            'enableProfiling'=>true,
            'enableParamLogging' => true,
        ),
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                    // …
                    array(
                        'class'=>'ext.db_profiler.DbProfileLogRoute',
                        'countLimit' => 1, // How many times the same query should be executed to be considered inefficient
                        'slowQueryMin' => 0.01, // Minimum time for the query to be slow
                    ),
            ),
        ),
    ),
);
于 2018-08-09T11:09:25.913 回答