【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);
标签:addAll,name,val,title,value,TP3.2,array,方法 来源: https://www.cnblogs.com/BearLee/p/11263235.html