Yii CDBCommand getText显示SQL中的所有变量

时间:2012-02-10 10:53:41

标签: php yii

我正在使用Yii的Yii :: app() - > db-> createCommand()来构建SQL查询。为了查看Yii生成的SQL代码,我使用的是CDBCommand的getText()方法。问题是,当我在包含参数的SQL代码上使用getText()方法时,例如:

Yii::app()->db->createCommand()
           ->select("name")
           ->from('package')
           ->where('id=:id', array(':id'=>5))
           ->queryRow();

getText()方法返回以下SQL:

select name from package where id=:id

而不是:

select name from package where id=5

这适用于简单查询,但对于包含大量参数的更复杂查询,将每个参数复制/粘贴到SQL代码中进行测试非常困难。

有没有办法使用getText()或Yii中的其他方法直接在SQL中显示参数?

干杯!

4 个答案:

答案 0 :(得分:4)

$sql = Yii::app()->db->createCommand()
  ->select("name")
  ->from('package')
  ->where('id=:id', array(':id'=>5))
  ->queryRow();

$query=str_replace(
   array_keys($sql->params),
   array_values($sql->params),
   $sql->getText()
);

答案 1 :(得分:2)

您可以使用CDbConnection :: enable ParamLogging属性。例如,在config / main.php中:

'db' => array (
        'enableParamLogging' => true,

,显示和记录的错误将包含绑定值。

答案 2 :(得分:0)

为什么你不尝试如下。我不是专家只是发布我的知识,如果它不适合你的原谅我...

               $connection=Yii::app()->db;
            $id=5; // you can able to change by "GET" or "POST" methods
    $sql="SELECT name FROM package WHERE id = :id ";
    $command = $connection->createCommand($sql);
    $command->bindParam(":id",$id,PDO::PARAM_STR);
    $dataReader=$command->query();          
    $rows=$dataReader->readAll();
    $namevalue=array();
    foreach($rows as $max)
    {
    $namevalue = $max['name'];
    }   
    echo $namevalue; // which is the value u need
谢谢......

答案 3 :(得分:-3)

看起来你是在Yii正在准备的PDOStatement之后:

$cmd = Yii::app()->createCommand();

$cmd->select("name")
       ->from('package')
       ->where('id=:id', array(':id'=>5))
       ->queryRow();

// returns a PDO Statement - http://php.net/manual/en/class.pdostatement.php
Yii::log($cmd->getPdoStatement()->queryString);

这对你有用吗?似乎应该(代码未经测试)。