Intereting Posts
Получить все скрипты с внешнего веб-сайта Django и PHP вместе на сервере с единственным IP-адресом и портом Есть ли способ узнать, как «глубокий» массив PHP? Маршрутизация для дерева категорий показать контент на основе зарегистрированного пользователя user = role в wordpress с помощью PHP Как заменить / избежать U + 2028 или U + 2029 символов в PHP, чтобы остановить мой JSONP API CentOS: включение поддержки GD в PHP-установке система управления документами на основе php лучший способ измерить (и уточнить) производительность с помощью PHP? PHP, SOAP, .NET – ссылка на объект не установлена ​​в экземпляр объекта Как прочитать RS232 Serial Port в PHP, как эта QBasic Program Отключить WooCommerce Способы оплаты, если достигнут лимит количества товаров "Exec () отключен из соображений безопасности" & "Неопределенная переменная" url закодированные косые черты, нарушающие мое приложение codeigniter Как отслеживать местоположение / регион пользователей в PHP

YII CDBCommand getText, чтобы показать все переменные в SQL

Я использую 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?

Ура!

Solutions Collecting From Web of "YII CDBCommand getText, чтобы показать все переменные в SQL"

Похоже, вы после 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 

Спасибо…