2012-02-10 16 views
7

私はYiiのYii :: app() - > db-> createCommand()を使用してSQLクエリを作成しています。 Yiiが生成するSQLコードを表示するために、私はCDBCommandのgetText()メソッドを使用しています。Yii CDBCommand getTextを使用してSQL内のすべての変数を表示

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

のgetText()メソッドは、以下のSQLを返す:

select name from package where id=:id 

代わりに:

問題は、私は、例えば、パラメータを含むSQLコードでのgetText()メソッドを使用する場合、あります
select name from package where id=5 

これは単純なクエリでは問題ありませんが、パラメータが多い複雑なクエリでは、各パラメータをSQLコードにコピーして貼り付けてテストするのは非常に苦労します。

getText()やその他のYiiでメソッドを使用してSQLを直接表示する方法はありますか?

乾杯! below.iは専門家ではないよと

答えて

-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); 

それはあなたのために働くのですか?それは(テストされていない)コードする必要があるようです。

+0

いいえ、これは のような同じステートメントを返しました。「id =:idのパッケージから名前を選択してください。」実際の回避策についてはこの記事を参照してください。http://daveyshafik.com/archives/605-debugging-pdo-prepared-statements .html。 YiiのPDOに関するものではありませんが、yiiにも適用できます – Ekonoval

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 

はあなたに感謝...あなたのPROBのためにその何適した私を許していない場合はちょうど私の知識に投稿する

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() 
); 
2

CDbConnetion :: enableParamLoggingプロパティを使用できます。例えば、config/main.php:

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

であり、表示され、記録されたエラーにはバウンド値が含まれます。

関連する問題