• 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;
    
        }
  • 相关阅读:
    (转载) Hadoop科普文——常见的45个问题解答
    JSP---设置CooKIe
    JSP---使用HTML完成定时跳转功能
    JSP接受全部请求参数名称及其对应内容
    JSP用户登录程序实现
    jsp连接数据库MySql
    MapReduce程序--成绩统计
    Java中的StringTokenizer类的使用方法
    eclipse hadoop开发环境配置
    解决SDK Manager无法更新问题
  • 原文地址:https://www.cnblogs.com/zhaozhilu/p/3017151.html
Copyright © 2020-2023  润新知