yii sql的输出

本文介绍如何在Yii框架中改进SQL打印功能,并解决in过滤问题,通过新增showQuery函数实现复杂SQL的清晰展示,同时优化in过滤操作,提高开发效率。

虽然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/archive/2013/04/12/3017151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值