1. 程式人生 > >thinkphp3.2 add 與 addAll的區別

thinkphp3.2 add 與 addAll的區別

add 與 addAll的區別

add操作生成的sql語句key與value一一對應,但是有時addAll生成的sql語句key與value不是一一對應的

原因

1.add生成sql 的類是Driver,在迴圈datafields與$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,先生成fieldsdata,這是當$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).')';
        }