yii sql的输出

虽然yii提供了ar模型,但是当有很复杂的sql时,我们大多数还是写原始sql,那样会遇到打印sql问题

修改CDbCommand.php
增加如下代码
 public $inputParams = array();
在public function bindValue($name, $value, $dataType=null) 方法中增加如下代码

$this->inputParams[] = array($name, $value, $dataType=null);
注意是在return 以前加

增加如下代码

添加showQuery函数

public function showQuery($query)
{
      $keys = array();
      $values = array();
        
      # build a regular expression for each parameter
      foreach ($this->inputParams as $param)
      {
            if (is_string($param[0]))
            {
                $keys[] = '/'.$param[0].'/';
            }
            else
            {
                $keys[] = '/[?]/';
            }

            if (!ini_get('magic_quotes_gpc'))
            {
                $param[1] = addslashes($param[1]);
            }
            if(is_numeric($param[1]))
            {
                $values[] = intval($param[1]);
            }
            else
            {
                $values[] = "'".$param[1] ."'";
            }
        }
       
        $query = preg_replace($keys, $values, $query, 1, $count);
        return $query;
}

echo $command->showQuery($sql);  //打印sql

 yii sql的in 过滤问题

    public function bindIn($prefix,$array,$fieldType = PDO::PARAM_INT)
    {
        
        for($i=0;$i<count($array);$i++)
        {
            $this->bindValue(":$prefix$i",$array[$i], $fieldType); 
        }
       
    }

调用

$sql='SELECT * FROM account where accountId ';
Yii::import('application.extensions.GeneralStr');
$gereralStr = new GeneralStr();
$sql.= $gereralStr->inSql("a",$array);
$command = Yii::app()->db->createCommand($sql);  
$command->bindIn("a",$array);
$result =  $command->queryAll();
echo $command->showQuery($sql);

 拼接

    public function inSql($prefix,$array)
    {
        $sql=' in (';
        
        for($i=0;$i<count($array);$i++)
        {
            if($i!=count($array)-1)
            {
                $sql.=":$prefix$i,";
            }else{
                $sql.=":$prefix$i";
            }
        }

        $sql.=')';
        return $sql;

    }
原文地址:https://www.cnblogs.com/zhaozhilu/p/3017151.html