問題:做一個導入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);