码迷,mamicode.com
首页 > 数据库 > 详细

用php把access数据库导入到mysql

时间:2014-08-01 19:28:22      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:blog   os   io   文件   数据   for   cti   ar   

<?php
header("content-Type: text/html; charset=utf-8");
///
///把access数据库转换成mysql的SQL语句
///请在命令行运行
///

//连接access数据库
$db = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("./test.mdb"), "", "");

//生成sql文件
$file = "test.sql";
save_file($file, "SET NAMES utf8;\n\n");
$tables = get_tables($db);
for($i=0; $i<count($tables); $i++){
	$table = $tables[$i];
	echo("$i\t$table\n");
	$res = odbc_exec($db, $sql = "SELECT * FROM `$table`");

	$fields = get_table_fields($res);
	$structure_sql = get_table_structure($table, $fields)."\n\n";
	$data_sql = iconv("GBK", "UTF-8", get_table_data($res, $table)."\n\n\n");

	save_file($file, $structure_sql);
	save_file($file, $data_sql);
}
echo("ok");

/////////////////////////////////函数//////////////////////////////////////
//保存文件
function save_file($file, $data){
	$fp = fopen($file, ‘a+‘);
	fwrite($fp, $data);
	fclose($fp);
}

//获取数据表
function get_tables($db){
	$res = odbc_tables($db);
	$tables = array();
	while (odbc_fetch_row($res)){
		if(odbc_result($res, "TABLE_TYPE")=="TABLE")
			$tables[] = odbc_result($res, "TABLE_NAME");
	}
	return $tables;
}
//获取表字段
function get_table_fields($res){
	$fields = array();
	$num_fields = odbc_num_fields($res);
	for($i=1; $i<=$num_fields; $i++){
		$item = array();
		$item[‘name‘] = odbc_field_name($res, $i);
		$item[‘len‘] = odbc_field_len($res, $i);
		$item[‘type‘] = odbc_field_type($res, $i);
		$fields[] = $item;
	}
	return $fields;
}
//生成建表SQL
function get_table_structure($table, $fields){
	$primary_key = ‘‘;
	$sql = array();
	foreach($fields as $item){
		if($item[‘type‘]==‘COUNTER‘){
			$sql[] = "\t`".$item[‘name‘]."` int(".$item[‘len‘].") NOT NULL AUTO_INCREMENT";
			$primary_key = $item[‘name‘];
		}else if($item[‘type‘]==‘VARCHAR‘){
			$sql[] = "\t`".$item[‘name‘]."` varchar(".$item[‘len‘].") NOT NULL DEFAULT ‘‘";
		}else if($item[‘type‘]==‘LONGCHAR‘){
			$sql[] = "\t`".$item[‘name‘]."` text NOT NULL";
		}else if($item[‘type‘]==‘INTEGER‘){
			$sql[] = "\t`".$item[‘name‘]."` int(".$item[‘len‘].") NOT NULL DEFAULT ‘0‘";
		}else if($item[‘type‘]==‘SMALLINT‘){
			$sql[] = "\t`".$item[‘name‘]."` smallint(".$item[‘len‘].") NOT NULL DEFAULT ‘0‘";
		}else if($item[‘type‘]==‘REAL‘){
			$sql[] = "\t`".$item[‘name‘]."` tinyint(1) NOT NULL DEFAULT ‘0‘";
		}else if($item[‘type‘]==‘DATETIME‘){
			$sql[] = "\t`".$item[‘name‘]."` datetime NOT NULL";
		}else if($item[‘type‘]==‘CURRENCY‘){
			$sql[] = "\t`".$item[‘name‘]."` float NOT NULL DEFAULT ‘0‘";
		}else{
			$sql[] = "\t`".$item[‘name‘]."` varchar(255) NOT NULL DEFAULT ‘‘";
		}
	}
	return "CREATE TABLE IF NOT EXISTS `$table` (\n".implode(",\n", $sql).($primary_key?",\n\tPRIMARY KEY (`".$primary_key."`)\n":"\n").") ENGINE=MyISAM DEFAULT CHARSET=utf8 ;";
}
//获取表数据
function get_table_data($res, $table){
	$row_sql = array();
	while( $row = odbc_fetch_array($res) ) {
		$row_sql[] = get_row_sql($table, $row);
	}
	return implode("\n", $row_sql);
}
//生成插入SQL
function get_row_sql($table, $row){
	$keys = array_keys($row);
	$values = array_values($row);
	for($i=0;$i<count($values);$i++){
		$values[$i] = addslashes($values[$i]);
	}
	return "INSERT INTO ".$table."(`".implode("`,`", $keys)."`) VALUES(‘".implode("‘,‘",$values)."‘);";
}
?>

  

用php把access数据库导入到mysql,布布扣,bubuko.com

用php把access数据库导入到mysql

标签:blog   os   io   文件   数据   for   cti   ar   

原文地址:http://www.cnblogs.com/coffee_cn/p/3885462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!