Kee & Design

03 May, 2008

基于FleaPHP的数据迁移:Access to Mysql

Posted by: Hicro Kee In: 网络开发 ()

之前给学院弄的两个站都需要数据迁移,一个是Access to Mysql,一个是Excel to Mysql。后者可以把Excel转成Access,所以说到底还是Access to Mysql。

Access to Mysql主要途径有二:工具法和脚本法。前者可以用Navicat等Mysql批量转换,简单又快但不灵活;后者虽然比较麻烦,但效果好,且灵活,这里用到的是第二种。

由于远程服务器不能在PHP上使用Access,所以我是在本机上使用APM Express,把数据导入到本地数据库,再用Navicat迁移到远程数据库,现实使用的效果还不错。

我的目录设置为

根目录为/site

FleaPHP程序目录为/site/APP

迁移数据的原理基本上就是,同时打开ADODB(连接Access)和FleaPHP下的TDG(连接Mysql),再同时读数据和写数据。

先建立一个/site/inc/_common.php文件,由于用不上MVC,所以要用这个来启动非MVC模式的FleaPHP。

<?php
/**
 * 将FleaPHP以non-MVC模式启动,用于传统开发方式
 *
 * @author Hicrokee hicrokee@gmail.com
 * @version 1.0
 * @date Thu Mar 13 15:33:02 CST 2008
 */
 
define('DEPLOY_MODE', true);
define('LIB_DIR', realpath(dirname(__FILE__) . '/../APP'));
require('../FLEA/FLEA.php');
FLEA::loadAppInf(LIB_DIR.'/Config/common.php');
FLEA::import(LIB_DIR);
FLEA::init();

再建立/site/TOOLS/db.php文件,把ACCESS数据库放在同一目录,这个示例代码包含了编码转换,时间STAMP转换,文本替换等常用功能。$rs->Fields($field)的$field值是从0开始,从左到右数的字段序号

<?php
include('../inc/_common.php');
 
//初始化mdb数据库
$conn = new com("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("ncms.mdb");
 
$conn->Open($connstr);
$rs = new com("ADODB.RecordSet");
 
//初始化Mysql数据库
$tblArticles = FLEA::getSingleton('Table_Articles');
/* @var $tblArticles Table_Articles */
 
$rs->Open("select * from NCMS_news",$conn,1,1);
$rows = array();
while(! $rs->eof) {
	$row = array();
	$row['title'] = iconv('GB2312','UTF-8',$rs->Fields(2));//新数据库所有的字段比原数据库长,所以都不用截
	$row['content'] = iconv('GB2312','UTF-8',str_replace('new/tools/loadimg.asp?FileName=','site/upload/news/oldimg/',$rs->Fields(3)));
	$row['author'] = iconv('GB2312','UTF-8',$rs->Fields(4));
	$row['source'] = iconv('GB2312','UTF-8',$rs->Fields(5));
	$row['created'] = iconv('GB2312','UTF-8',strtotime($rs->Fields(16)));//时间STAMP转换
	$row['updated'] = $row['created']; 
	$row['class_id'] = 58;//因为迁移时分类改变了,干脆重置为同一个数字
 
	$rows[] = $row;
	$rs->MoveNext();
}
 
$tblArticles->saveRowset($rows,false);
 
echo '数据转换成功,为了安全,请删除或重命名本文件。';
?>

转换后记得检查是否正确,这里演示用的数据量很少,所以直接用数组缓存了再导入Mysql,如果数据多的话,可以不用TDG而用回原生的PHP代码,另外也要读一部分数据写一部分数据。本例仅适用于少数据的情况。

No Responses to "基于FleaPHP的数据迁移:Access to Mysql"

Comment Form


  • 羡慕: 美貌与智慧并重的WP主人,可否分享下这个主题的常识给俺,谢谢啦!! 我的www.giftaste.cn 等会加你QQ
  • HicroKee: ibus没用过,Redhat时用小企鹅不错,ubuntu只用SCIM,因为平时要输入简繁中日法,比较和谐。
  • Kee & Design : Blog Archive : Sina股票数据接口的研究: [...] 我与新浪的那段难以启齿的过去说起来还真是纠结呐,初中时装网络时上的第一个门户,现在手机看新闻也是上sina,高中无聊时写的一个图书下载软件用的也是偷取新浪的数据,大二时第一次实习也是去的新浪~现在研究的这个股票数据接口也是新浪的,啊,新浪~~~你真是一个好~~~~容易被人欺负的家伙呀~
  • racoonwise: 好囧啊 哈哈
  • risent: 中文输入ibus,很顺手

About


Hicro Kee
( == ChiFung Cheung, Male, 20 )
Designed by Cheung Clan
Mailbox/GTalk: hicrokee#gmail.com
MSN: hicrokee#hotmail.com
QQ: 317862336

回不了的过去

05月 2008
« Apr   Jun »
 123
45678910
11121314151617
18192021222324
25262728293031