Yii CDBCommand getText to show all variables in the SQL

六月ゝ 毕业季﹏ 提交于 2019-12-21 04:45:07

问题


I am using Yii's Yii::app()->db->createCommand() to build an SQL query. In order to view the SQL code that Yii generates, I am using the getText() method of CDBCommand. Problem is, when I use the getText() method on SQL code that contain parameters, for example:

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

the getText() method returns the following SQL:

select name from package where id=:id

instead of:

select name from package where id=5

This is fine for simple queries, but for more complex queries with lots of parameters, it is quite a pain to copy/paste each parameter into the SQL code to test it.

Is there any way to display the parameters directly inside the SQL using getText() or some other method in Yii?

Cheers!


回答1:


Looks like you're after the PDOStatement that Yii is preparing:

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

Does that work for you? Seems like it should (code untested).




回答2:


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



回答3:


You can use the CDbConnetion::enableParamLogging propery. For instance, in config/main.php:

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

and the shown and logged error will contain the bound values.




回答4:


why don you try as below.i am not an expert just posting to my knowledge if its no suitable for your prob pardon me...

               $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

thank you...



来源:https://stackoverflow.com/questions/9226625/yii-cdbcommand-gettext-to-show-all-variables-in-the-sql

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!