thinkphp3.2 add 与 addAll的区别

add 与 addAll的区别

add操作生成的sql语句key与value一一对应,但是有时addAll生成的sql语句key与value不是一一对应的

原因

1.add生成sql 的类是Driver,在循环 d a t a fields与$values保持一一对应关系

foreach ($data as $key=>$val){
            if(is_array($val) && 'exp' == $val[0]){
                $fields[]   =  $this->parseKey($key);
                $values[]   =  $val[1];
            }elseif(is_null($val)){
                $fields[]   =   $this->parseKey($key);
                $values[]   =   'NULL';
            }elseif(is_scalar($val)) { // 过滤非标量数据
                $fields[]   =   $this->parseKey($key);
                if(0===strpos($val,':') && in_array($val,array_keys($this->bind))){
                    $values[]   =   $this->parseValue($val);
                }else{
                    $name       =   count($this->bind);
                    $values[]   =   ':'.$name;
                    $this->bindParam($name,$val);
                }
            }

2.addAll生成sql 的类是Mysql,先生成 f i e l d s data,这是当$val
非法时,就会丢失value,导致不匹配

$fields =   array_map(array($this,'parseKey'),array_keys($dataSet[0])); //先生成$fields数组
        foreach ($dataSet as $data){
            $value   =  array();
            foreach ($data as $key=>$val){
                if(is_array($val) && 'exp' == $val[0]){
                    $value[]   =  $val[1];
                }elseif(is_scalar($val) || is_null($val)){
                    if(0===strpos($val,':') && in_array($val,array_keys($this->bind))){
                        $value[]   =   $this->parseValue($val);
                    }else{
                        $name       =   count($this->bind);
                        $value[]   =   ':'.$name;
                        $this->bindParam($name,$val);
                    }
                }
            }
            $values[]    = '('.implode(',', $value).')';
        }

猜你喜欢

转载自blog.csdn.net/pwjiferox/article/details/79415178