在 CodeIgniter 中,我会这样做:
print_r ($this->db->queries);
在 Yii 我试过:
print_r (Yii::app()->db)
但这没有显示任何查询。
更新:我理解我的问题:当我想在一个POST
动作上显示数据库查询时,我不显示它。使用时GET
,没问题。
在 CodeIgniter 中,我会这样做:
print_r ($this->db->queries);
在 Yii 我试过:
print_r (Yii::app()->db)
但这没有显示任何查询。
更新:我理解我的问题:当我想在一个POST
动作上显示数据库查询时,我不显示它。使用时GET
,没问题。
正如@bool.dev 所说,您可以使用CWebLogRoute
或在我的情况下使用CFileLogRoute
将这些查询存储在文件中。
array (
'class' => 'CFileLogRoute',
'categories' => 'system.db.*',
'logFile' => 'sql.log',
),
为了补充@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
如果你真的想在yii中记录每个查询,请使用yii db profiler扩展。
步骤 1。从 -->链接下载扩展
步骤 2。解压到protected/extensions/
步骤 3。将文件夹名称重命名yii-db-profiler-master
为db_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
),
),
),
),
);