Yii如何在执行之前显示渲染的查询

时间:2012-06-29 12:17:11

标签: php mysql yii

在Yii中如何在执行之前显示渲染的查询。

$sql="SELECT * from users WHERE user_id = :user_id";
    $command=Yii::app()->db->createCommand($sql);
    // replace the placeholder ":user_id" with the actual username value
    $command->bindParam(":user_id",$user_id,PDO::PARAM_INT);
    echo "<br/>".$command->getText();

我想打印bind param中包含的查询 例如user_id = 1然后

SELECT * from users WHERE user_id = 1

2 个答案:

答案 0 :(得分:2)

虽然在执行之前不可能使用bind params查看准备好的查询,但是当然可以在日志中检查它。你只需要启用MySQL的所谓'general_query_log';有几种方法可以做到这一点,我想,最简单的就是......

SET GLOBAL general_log = 'ON';

...在MySQL shell中。然后你可以尝试你的查询;它将被记录在mysql.general_log中,因此您可以使用类似......

之类的内容进行检查
SELECT * FROM mysql.general_log;

不要忘记在不再需要时禁用日志记录:

SET GLOBAL general_log = 'OFF';

这里是关于它的more info

答案 1 :(得分:1)

Yii在PDO和各类课程之上工作。使用PDOStatementbindParam

  

与PDOStatement :: bindValue()不同,变量被绑定为引用,并且仅在调用PDOStatement :: execute()时进行计算。

所以在执行之前你将无法看到它。