Yii CDBCommand getText для отображения всех переменных в SQL - PullRequest
7 голосов
/ 10 февраля 2012

Я использую Yii Yii :: app () -> db-> createCommand () для построения SQL-запроса.Для просмотра кода SQL, который генерирует Yii, я использую метод getText () 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

из:

select name from package where id=5

Это хорошо для простых запросов, но для более сложных запросов с большим количеством параметров довольно сложно скопировать / вставить каждый параметр в код SQL для его проверки.

Есть ли способ отобразить параметры непосредственно внутри SQL, используя getText () или какой-либо другой метод в Yii?

Cheers!

Ответы [ 4 ]

4 голосов
/ 04 декабря 2013
$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 голосов
/ 20 февраля 2014

Вы можете использовать свойство CDbConnetion :: enableParamLogging. Например, в config / main.php:

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

и показанная и зарегистрированная ошибка будет содержать связанные значения.

0 голосов
/ 21 февраля 2012

Похоже, вы после PDOStatement, которое готовит Yii:

$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 голосов
/ 10 февраля 2012

почему бы вам не попробовать, как показано ниже. Я не эксперт, просто публикуя свои знания, если это не подходит для вашей проблемы, простите меня ...

               $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

спасибо ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...