我正在使用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中显示参数?
干杯!
答案 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);
这对你有用吗?似乎应该(代码未经测试)。