<?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的更多相关文章

  1. Access数据库导入到mysql数据库中

    做项目时需要查询手机号归属地的,用网上提供的接口,耗时太长,反应慢,只能自己在网上搜了一个包含所有手机号归属地的Access数据库,导入到自己的mysql数据库中 Access数据库导入到mysql中 ...

  2. 将access数据库导入mysql

    一般地,直接在mysql端,导入时选择access文件就行:但是若access数据库版本太老,导入mysql时会出错: 这时,就需要借助access 2003,对原始数据进行转换为2003版本数据,即 ...

  3. C# winform 编程 向ACCESS数据库导入EXCEL表使用心得

    public string MyConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ErLake.mdb&quo ...

  4. Access数据库导入到SQL Server 2005 Express中

    安装好SQL Server 2005 Express后,再安装SQL Server Management Studio Express CTP就可以很方便的使用控制台进行数据库的管理.但SQL Ser ...

  5. access数据库导入Oracle

    1.对着当前的表右击->导出->选择下面的保存类型为"ODBC数据库"找一个路径输入文件名2.将x导出到x,点击->确定3.在弹出的对话框中DSN名称,点击-&g ...

  6. Mysql:数据库导入导出

    Mysql:数据库导入导出 Mysql数据库导出 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 1.mysqldump是在cmd下的命令,需要在linux命令行 ...

  7. 180620-mysql之数据库导入导出

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...

  8. MYSQL数据库导入出错:#1046 - No database selected

    今天遇到的mysql导入Navivat for MySql,总是出错,搞了一会才记起没有创建同名的数据库,然后还是导不进去,原来是要在建立的同名的数据单击右键---->运行Sql文件--> ...

  9. Java实现MySQL数据库导入

    距离上班还有一段时间.现在总结一下如何使用Java语言实现MySQL数据库导入: 首先新建名为test的数据库: 其次执行下面Java代码: import java.io.File; import j ...

随机推荐

  1. metasploit framework(八):snmp扫描,暴力破解

    snmp扫描linux 设置相关参数,这里使用的默认字典,你可以自己制定字典. run 然后使用枚举模块 设置相关参数 run,详细的信息就枚举出来了 snmp扫描windows 先枚举用户 设置目标 ...

  2. Java volatile关键字的用法

    volatile不能解决同步问题 如果想要理解volatile关键字的作用不得不先了解Java内存模型 摘抄一下来自百度百科的话 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把 ...

  3. GreenDao3.0简单使用(转)

    关于GreenDao greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案. 关于greenDAO的概念可以看官网greenDAO greenDAO 优势 1.一个精简的 ...

  4. centos 7 redis-4.0.11 哨兵

    redis-master:192.168.199.223 redis-slave_1: 192.168.199.224 redis-slave_2: 192.168.199.252 redis-mas ...

  5. ELK Deployed

    Enviroment prepare rpm -qa | grep java wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/51 ...

  6. ucore-lab1-练习4report

    练习四:分析bootloader加载ELF格式的OS的过程  1.bootloader如何读取硬盘扇区? (1)在练习3中实现了bootloader让CPU进入保护模式,下一步的工作就是从硬盘上加载并 ...

  7. pta7-18奥运排行榜(模拟)

    题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101314114867245056 题意:给n个国家,以及每个国家 ...

  8. oracle数据库新建库

    1.https://jingyan.baidu.com/article/76a7e409f3f37bfc3b6e15de.html 利用工具新建库. 2.创建时报错 out of memory 调节s ...

  9. 【Linux 线程】常用线程函数复习《二》

    1.函数pthread_join /************************************************************************* > Fil ...

  10. echarts柱状图Demo

    echarts链接:http://gallery.echartsjs.com/editor.html?c=xB1Sfo5JbX 代码: var xData = ['a', 'b', 'c', 'd', ...