2012-02-10 29 views
7

estoy usando Yii de Yii :: aplicación() -> db-> createCommand() para construir una consulta SQL. Para ver el código SQL que genera Yii, estoy usando el método getText() de CDBCommand. El problema es que, cuando se utiliza el método en el código SQL getText() que contiene parámetros, por ejemplo:Yii CDBCommand getText para mostrar todas las variables en el SQL

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

el método getText() devuelve la siguiente SQL:

select name from package where id=:id 

en lugar de:

select name from package where id=5 

Esto está bien para consultas simples, pero para consultas más complejas con muchos parámetros, es bastante doloroso copiar/pegar cada parámetro en el código SQL para probarlo.

¿Hay alguna manera de visualizar los parámetros directamente en el interior del SQL usando getText() o algún otro método de Yu?

¡Salud!

Respuesta

-3

miradas como si estuviera después de la PDOStatement que Yii está preparando:

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

¿Eso funciona para usted? Parece que debería (código no probado).

+0

No, esto devolvió la misma declaración, como "seleccione el nombre del paquete donde id =: id", consulte este artículo para una solución real http://daveyshafik.com/archives/605-debugging-pdo-prepared-statements .html. No se trata de PDO en Yii, pero también puede aplicarse para yii – Ekonoval

0

¿por qué no intenta below.i como no soy un experto simple publicación que yo sepa si su no es adecuado para su prob ... Perdóneme

   $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 

gracias ...

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

Puede usar la propiedad CDbConnetion :: enableParamLogging. Por ejemplo, en config/main.php:

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

y el error mostrado y registrado contendrá los valores encuadernados.

Cuestiones relacionadas