今天需要将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; }
也可以 直接在直接数据文件的 获取aid 的函数上面修改成
for($i=0;$i>3000;$i++){ $arcID = GetIndexKey($arcrank, $typeid, $senddate, $channelid, $senddate, $adminid); }
现在问题出现了,所有的时间完好无损,后台栏目可以列出,但编辑,表单获取不到数据
最后跟跟到PrintAutoFieldsEdit这个函数里
打印$dede_addonfields 一切ok
最后跟到 GetFormItemValueA 这个函数里面,发现这个函数直接调用GetFormItemValue 在进入 这个函数处理非常的长 只能了解大意,获取当前的字段类型,逐一根据数据库的内容组合成input表单输出带value
习惯性的答应了一下 print_r($fieldname); die(); 最后一个字段名打印出来了,没有什么问题,但突然发现是小写,猛然发现,这个excel导入数据库的字段既然是大写,尽管我在模型中指定的也是大小,但这里打印的是小写,说明 织梦模型字段名做了自动转换,每次增 读 都会导致字段对应不上,出错,瞬间就将字段全部改为小写,瞬间就好了,呵呵,蛋疼