Hi Pentium10, i have a solution for your request. My solution is override CDbCommand and CDbConnection.
MyCDbConnection.php
<?php
class MyDbConnection extends CDbConnection {
public function createCommand($query=null)
{
$this->setActive(true);
return new MyCDbCommand($this,$query);
}
}
MyCDbCommand.php
<?php
class MyCDbCommand extends CDbCommand {
public $myParam=array();
public function addLog() {
$params = array_merge($this->params,$this->myParam);
$sql = $this->getText();
if(!empty($params)) {
foreach ($params as $key => $value) {
$sql = str_replace($key, $value, $sql);
}
}
$sql = preg_replace("/\r\n|\n\r|\r|\n/",' ',$sql);
Yii::log($sql, 'sqltrace', 'system.db.CDbCommand');
//return $this;
}
public function bindValues($values)
{
foreach($values as $name=>$value)
{
$this->myParam[$name]=$value;
}
return parent::bindValues($values);
}
public function bindValue($name, $value, $dataType=null)
{
$this->myParam[$name]=$value;
return parent::bindValue($name, $value, $dataType);
}
public function query($params=array())
{
$this->addLog();
return parent::query($params);
}
public function queryAll($fetchAssociative=true,$params=array())
{
$this->addLog();
return parent::queryAll($fetchAssociative,$params);
}
public function queryColumn($params=array())
{
$this->addLog();
return parent::queryColumn($params);
}
public function queryRow($fetchAssociative=true,$params=array())
{
$this->addLog();
return parent::queryRow($fetchAssociative,$params);
}
public function queryScalar($params=array())
{
$this->addLog();
return parent::queryScalar($params);
}
}
In main.php config, you must change some param, like code follow:
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SHOW FULL COLUMNS FROM `tbl_example`
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (41)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (34)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SHOW CREATE TABLE `tbl_example`
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (53)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (34)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SELECT * FROM `tbl_example` `t` WHERE `t`.`id`=1 LIMIT 1
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (53)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (34)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SELECT * FROM `tbl_example` `t` WHERE is_public=1
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (41)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (42)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SELECT * FROM `tbl_example` WHERE is_public = 1
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (53)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (50)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SELECT * FROM `tbl_example` WHERE is_public = 1
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (41)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (58)
2014/07/24 17:58:17 [sqltrace] [system.db.CDbCommand] SELECT IFNULL(MAX(id),0) as max FROM `tbl_example` WHERE is_public = 1
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (14)
in E:\Projects\My\yiitest\apps\customsqllog\protected\components\MyCDbCommand.php (59)
in E:\Projects\My\yiitest\apps\customsqllog\protected\controllers\SiteController.php (65)