• 【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);
  • 相关阅读:
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    矩形覆盖
    变态跳台阶
    跳台阶
    ubuntu图形界面切换文字界面(文字界面切换图形界面)
    Django环境安装、虚拟机端口映射、pycharm远程配置
    sql注入(一)-----数字型
    mysql基本语法
    渗透测试之------信息收集
  • 原文地址:https://www.cnblogs.com/BearLee/p/11263235.html
Copyright © 2020-2023  润新知