dedecms数据库模型字段大小写引发的血案

今天需要将3k条数据的excel表格导入到数据库,中间出了一个一次诡异的现象,跟了几个小时代码,呵呵最后,发现是一个愚蠢的疏忽,先记录下数据导入过程

1:整理excel的字段,字段名尽量保持一致

2:后台建立数据库模型

3:为了方便将服务器的sql到处到本地的一个临时数据库里

4:通过navicat或者其他工具直接关联这个表,导入记录

5:在搬到服务器

由于我们一次性的增加了3k条数据,并且aid在excel中已经写死了,这样 我们的系统的aid还能获取到和excel里面的aid 会导致出错,我们需要手工跳过这段aid

dedecms默认的搞法是在,每次insert行为前往arctiny里面插入一次,在获取到这个表id的最后的自增长id

function GetIndexKey($arcrank, $typeid, $sortrank=0, $channelid=1, $senddate=0, $mid=1)
    {
        global $dsql,$senddate,$typeid2;
        if(empty($typeid2)) $typeid2 = 0;
        if(empty($senddate)) $senddate = time();
        if(empty($sortrank)) $sortrank = $senddate;
        $iquery = "
          INSERT INTO `#@__arctiny` (`arcrank`,`typeid`,`typeid2`,`channel`,`senddate`, `sortrank`, `mid`)
          VALUES ('$arcrank','$typeid','$typeid2' , '$channelid','$senddate', '$sortrank', '$mid') ";
        $dsql->ExecuteNoneQuery($iquery);
        $aid = $dsql->GetLastID();
        return $aid;
    }



我们可以直接mysql 命令行里设置这个值

也可以 直接在直接数据文件的  获取aid 的函数上面修改成

for($i=0;$i>3000;$i++){
    $arcID = GetIndexKey($arcrank, $typeid, $senddate, $channelid, $senddate, $adminid);
    }



给他循环3k次,呵呵,这个方法比较笨,但非常的好操作

现在问题出现了,所有的时间完好无损,后台栏目可以列出,但编辑,表单获取不到数据

最后跟跟到PrintAutoFieldsEdit这个函数里

打印$dede_addonfields 一切ok

最后跟到 GetFormItemValueA 这个函数里面,发现这个函数直接调用GetFormItemValue 在进入 这个函数处理非常的长 只能了解大意,获取当前的字段类型,逐一根据数据库的内容组合成input表单输出带value

习惯性的答应了一下 print_r($fieldname); die(); 最后一个字段名打印出来了,没有什么问题,但突然发现是小写,猛然发现,这个excel导入数据库的字段既然是大写,尽管我在模型中指定的也是大小,但这里打印的是小写,说明 织梦模型字段名做了自动转换,每次增 读 都会导致字段对应不上,出错,瞬间就将字段全部改为小写,瞬间就好了,呵呵,蛋疼


你可能感兴趣的:(dedecms数据库模型字段大小写引发的血案)