<?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. Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)

    在日常开发过程中难免会因为一时疏忽而留下一些Bug,这些Bug就是埋在程序里的定时炸弹,如果不能及时铲除就会导致程序的不稳定,异常或闪退的现象,从而导致用户的体验的下降.那么怎么才能找出这些埋在程序里 ...

  2. pta l3-1(凑零钱)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805054207279104 题意:给定n枚硬币的面值,需要支付 ...

  3. Django项目之客户

    关于客户的操作 主页(被继承) {% load static %} <!DOCTYPE html> <html lang="en"> <head> ...

  4. NoHtml

    private string NoHtml(string Htmlstring) { if (string.IsNullOrWhiteSpace(Htmlstring)) return string. ...

  5. 152. Maximum Product Subarray (Array; DP)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  6. oracle中job定时任务96

    .INTERVAL参数常用值示例 每天午夜12点            ''TRUNC(SYSDATE + 1)'' 每天早上8点30分         ''TRUNC(SYSDATE + 1) +  ...

  7. Win10 安装 Anaconda3 用 Anaconda3 安装TensorFlow 1.2 (只支持python3.5)

    Win10 安装 Anaconda3 1.安装Anaconda3 选择相应的Anaconda进行安装,下载地址点击这里,下载对应系统版本的Anaconda,官网现在的版本是Anaconda 4.3.1 ...

  8. CodeForces - 55D(数位dp,离散化)

    题目来源:http://codeforces.com/problemset/problem/55/D Volodya is an odd boy and his taste is strange as ...

  9. freetype教程网址

    http://freetype.sourceforge.net/freetype2/docs/reference/ft2-system_interface.html#FT_Stream      ht ...

  10. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么2.redis的作者何许人也3.谁在使用red ...