Я использую 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?
Ура!
Похоже, вы после 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);
Это работает для вас? Похоже, он должен (код непроверен).
$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() );
Вы можете использовать свойство CDbConnetion :: enableParamLogging. Например, в config / main.php:
'db' => array ( 'enableParamLogging' => true,
и показанная и зарегистрированная ошибка будет содержать связанные значения.
почему ты не попробуй, как внизу. Я не эксперт, просто отправляю на свои знания, если он не подходит для твоей проблемы, прости меня …
$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
-$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
Спасибо…