2012-02-10 11 views
7

Używam Yii Yii :: app() -> db-> createCommand() do zbudowania zapytania SQL. Aby wyświetlić kod SQL wygenerowany przez Yii, używam metody getText() z CDBCommand. Problemem jest to, kiedy stosowanie metody getText() na kodzie SQL zawiera parametry, na przykład:Yii CDBCommand getText, aby wyświetlić wszystkie zmienne w SQL

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

sposób getText() zwraca następującą SQL:

select name from package where id=:id 

zamiast:

select name from package where id=5 

Jest to przydatne w przypadku prostych zapytań, ale w przypadku bardziej złożonych zapytań z wieloma parametrami, trudno jest skopiować/wkleić każdy parametr do kodu SQL, aby go przetestować.

Czy istnieje sposób wyświetlania parametrów bezpośrednio w SQL za pomocą metody getText() lub innej metody w Yii?

Pozdrawiam!

Odpowiedz

-3

Looks jakbyś był po PDOStatement, który Yii przygotowuje:

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

Czy to działa dla Ciebie? Wydaje się, że powinien (kod nietestowany).

+0

Nie, to zwróciło to samo oświadczenie, na przykład "wybierz nazwę z pakietu, w którym id =: id", zobacz ten artykuł, aby uzyskać prawdziwe obejście http://daveyshafik.com/archives/605-debugging-pdo-prepared-ventements .html. Nie chodzi o PDO w Yii, ale można ją również zastosować dla Yii – Ekonoval

0

dlaczego don spróbować jak below.i nie jestem ekspertem tylko delegowania do mojej wiedzy, jeśli jej nie nadaje się do prob pardon ...

   $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 

dziękuję ...

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

Możesz użyć propozycję CDbConnetion :: enableParamLogging. Na przykład w pliku config/main.php:

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

, a wyświetlany i rejestrowany błąd będzie zawierać powiązane wartości.

Powiązane problemy