将EXCEL数据存入MYSQL的简单方法

#1 gnuser

由于项目需要,必须实现将EXCEL数据存入MYSQL数据库中。为此花费了大量时间去百度、去谷哥。太专业的目前未能弄懂,SP带的那个暂时在测试时出现EXCEL中 有大量数据时报错的情况,未能使用上。
于是只能另找办法,终于找到了应用PHP文件处理+SP保存数据相结合的方法。
此方法我相信比较适合初学的朋友。
也请各位高手们多指教

EXCEL文件结构:(1)列:学校、班、学号、姓名、语文成绩、语文排名、数学成绩、数学排名 //当然实际数据不止这些,共有33项
另存为book1.csv  //取用csv格式,用逗号作分隔符这种,在TXT下打开如下:XX中学,107,0402091071827,沈XX,82,68,97,38
(2)行:全级学生的记录 //我做的数据记录有1550条。

mysql数据库:scores数据表,有字段:id、school、class、student_id、name、chinese、chinese_ranking、math、math_ranking //与EXCEL一一对应

程序代码:
model下scores.php
var $pk=id;
var $table=scores;
}
?>


controller下main.php代码
 
class main extends spController{

public function scores(){
$row = 1;//行数,从第1行开始
$handle = fopen("Book1.csv","r");//打开文件,文件地址请自己更改
while ($data = fgetcsv($handle,'',",")) { //PHP有自带的分析.csv函数:fgetcsv(要查的文件,每行最大的长度,字段分界符),按行循环
$num = count($data);//每行字段数,在本程序中不必要,可去掉,以下是重点
//由于EXCEL字段无法与MYSQL字段完全对应,只能用数组方法重新给变量成绩chengji赋值
$chengji=array(
   'school'=>$data[0],
   'class'=>$data[1],
   'student_id'=>$data[2],
   'name'=>$data[3],
   'chinese'=>$data[4],
   'chinese_ranking'=>$data[5],
   'math'=>$data[6],
   'math_ranking'=>$data[7],
);
//写入MYSQL语句
$scores=spClass("scores");
$scores->create($chengji);

$row++;//按行数递增循环
}
fclose($handle);
}
}
?>


本地运行程序成功输入,1550条记录用时半分钟左右。

2011-05-30 23:43:13

#2 jake

方法不错,值得推广。

看你之前的那个提示,应该是PHP内存不够引起的,你的1550条记录那个excel文件,应该也很大;而PHP默认内存是20M一个线程,所以会内存不够。

无论用上面的方法或是用PHPExcel扩展,处理那么大的文件,建议是把PHP的内存设置大些,而且运行时间也要设置得长些,这样才不会出错。

2011-05-31 09:08:09

#3 gnuser

谢谢老大指点

2011-05-31 11:32:32

#4 coolcool1265

如果只是导入导出数据,可以用Navicat,功能强大,使用简单。

2011-05-31 13:17:36

#5 vsxp

用用分段导入。

2011-06-03 19:26:05

#6 vsxp

用用分段导入。:L

2011-06-03 19:26:09

#7 ly365

CSV 貌似也简单。

2011-06-22 09:20:28

#8 虞飞

如果只是导入导出数据,可以用Navicat,功能强大,使用简单。
coolcool1265 发表于 2011-5-31 13:17
赞同这个建议。

2011-07-15 23:20:17

#9 gnuser

试试看。

2011-07-23 23:07:39