• 【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);
  • 相关阅读:
    Java(二)
    JS === 关于getElementsByClassName()
    JS === 简易放大镜
    JS === 拖拽盒子
    JS === 实现多个光标跟随事件
    JS === 实现回到顶部
    JS === 实现通过点击td 跳转相应的图片
    final、static关键字
    java面向对象——构造方法
    java面向对象——多态
  • 原文地址:https://www.cnblogs.com/BearLee/p/11263235.html
Copyright © 2020-2023  润新知