将access中的数据导入mysql
在前面我已经贴了一篇《如何把Access的数据导入到Mysql中》。这篇是转载的技术文档,因为我当时需要把数据做这样的导入。但是实际操作的时候,我并没有用这个方法,而是使用了php。
原理是差不多的,使用csv(逗号分割文件)作为中间载体。access2000或者2003都有导出功能,保存的时候选择文本文件(*.txt,*.csv......),然后使用默认一路next就行了,假设我们这里保存的是forummail.csv,是一个论坛里保存用户之间短消息的表。
用记事本打开这个csv文件,我们看到csv文件的格式是这样的:一条数据占一行,每个字段的值用引号括起来,中间使用逗号分割。看到这,也许你会想到使用file之类的函数取出一条然后使用explode+substr等等方法将数据放到一个数组里,然后写成sql语句插入。嗯,方法就是这样,但是很幸运,我们没有必要自己去分析这个数据,php提供了一个函数帮我们完成这一切,这就是fgetcsv()。
废话少说,贴代码如下:
Code: [Copy to clipboard]
<?php
$table="forummail";
$filename=$table.".csv";
require("conn.inc.php");
$fp = fopen ($filename,"r");
$num1=0;
while ($data = fgetcsv ($fp, filesize($filename)+1, ","))
{
$num = count($data);
$values="";
for ($i=0; $i < $num; $i++)
{
if($values=="")
{
$values="'".addslashes($data[$i])."'";
}
else
{
$values.=",'".addslashes($data[$i])."'";
}
}
$item="mailid,fromuserid,touserid,mailsubject,mailmessage,maildatetime,mailisread";
$strsql="insert into ".$table."(".$item.") values(".$values.")";
$res=mysql_query($strsql,$conn);
if(!$res)
{
echo mysql_errno(). ": ".mysql_error(). "<br>";
exit();
}
$num1++;
echo "第".$num1."条数据插入完毕<br />";
}
fclose ($fp);
?>
这段代码很简单,就不用我解释了吧。
当然,你可以考虑用php直接都access,这个好像是可以做到的,有人说他在荷兰的某个站点(:()上看到过php读access的类。或者使用excel,php读excel相对还是比较容易的。
问题:我没有测试对于二进制的数据处理会不会产生问题,但是我觉得应该不会。