【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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM