问题:做一个导入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);