【TP3.2.3】addAll方法的坑

问题:做一个导入Excel到数据库的功能中需要用到addAll功能,但是每次执行到addAll()时都会报错,如下

Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

 问题原因:mysql.class.php文件的insertAll方法存在缺陷

foreach ($data as $key=>$val){
                if(is_array($val) && 'exp' == $val[0]){
                    $value[]   =  $val[1];
                }elseif(is_scalar($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);
                    }
                }
            }
}

'title'=>$v->title? $v->title: ' '这种形式的数组赋值,跟'title'=>$v->title形式的数组赋值,结果是不一样的。

1.当$v->title的值不存在的时候,数组就相当于array('title'=>)这样了

2.'title'=>$v->title? $v->title: ' '在$v->title的值不存在时,数组相当于array('title'=>' ')

前者相当于没赋值,后者相当于赋值为空

 

解决方法:在数据录入时要判断值是否存在,代码如下

foreach($list as $k => $v){
    $dataList[] = [
      'title'        =>  $v['title'] ? $v['title'] : '',
    'name'      =>  $v['name'] ? $v['name'] : ''
    ]
}
M('sql') -> addAll($dataList);
上一篇:Map集合的遍历方法


下一篇:记一次ArrayList产生的线上OOM问题