用php把access数据库导入到mysql
<?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的更多相关文章
- Access数据库导入到mysql数据库中
做项目时需要查询手机号归属地的,用网上提供的接口,耗时太长,反应慢,只能自己在网上搜了一个包含所有手机号归属地的Access数据库,导入到自己的mysql数据库中 Access数据库导入到mysql中 ...
- 将access数据库导入mysql
一般地,直接在mysql端,导入时选择access文件就行:但是若access数据库版本太老,导入mysql时会出错: 这时,就需要借助access 2003,对原始数据进行转换为2003版本数据,即 ...
- C# winform 编程 向ACCESS数据库导入EXCEL表使用心得
public string MyConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ErLake.mdb&quo ...
- Access数据库导入到SQL Server 2005 Express中
安装好SQL Server 2005 Express后,再安装SQL Server Management Studio Express CTP就可以很方便的使用控制台进行数据库的管理.但SQL Ser ...
- access数据库导入Oracle
1.对着当前的表右击->导出->选择下面的保存类型为"ODBC数据库"找一个路径输入文件名2.将x导出到x,点击->确定3.在弹出的对话框中DSN名称,点击-&g ...
- Mysql:数据库导入导出
Mysql:数据库导入导出 Mysql数据库导出 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 1.mysqldump是在cmd下的命令,需要在linux命令行 ...
- 180620-mysql之数据库导入导出
文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...
- MYSQL数据库导入出错:#1046 - No database selected
今天遇到的mysql导入Navivat for MySql,总是出错,搞了一会才记起没有创建同名的数据库,然后还是导不进去,原来是要在建立的同名的数据单击右键---->运行Sql文件--> ...
- Java实现MySQL数据库导入
距离上班还有一段时间.现在总结一下如何使用Java语言实现MySQL数据库导入: 首先新建名为test的数据库: 其次执行下面Java代码: import java.io.File; import j ...
随机推荐
- EF CodeFirst学习笔记001--主键约定
Code First 的核心是约定,这些默认的规则使我们可以用我们自己的类来创建模型.EF框架要求一个类必须有一个键属性.规则约定如果一个属性名为Id或者是类名+Id的形式(如PatientId),这 ...
- 关于OPEN_MAX宏undeclared的问题
最近在看unp时,I/O复用-poll一章的代码使用到了OPEN_MAX.据书中描述,这一宏定义在limits.h头文件中,指代一个进程在任意时刻能打开的最大描述符数目.但在代码编译时遇到了错误,提示 ...
- java使用正则表达式
package com.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Tes ...
- Ubuntu下ssh的安装
1.安装 Ubuntu缺省安装了openssh-client,,如果没有安装,可用apt-get安装上即可. 安装ssh-server sudo apt-get install openssh-ser ...
- map按照value值排序
map可以实现key到value的一一映射,如果是一对多的,我们可以使用multimap multimap<int,int>mp; mp.insert(make_pair(first,se ...
- Android 实现简单 倒计时60秒,一次1秒
倒计时功能如上图所示,其实就几行代码即可实现效果啦!!! /** 倒计时60秒,一次1秒 */ CountDownTimer timer = new CountDownTimer(60*1000, 1 ...
- python之语音识别(speech模块)
1.原理 语音操控分为 语音识别和语音朗读两部分. 这两部分本来是需要自然语言处理技能相关知识以及一系列极其复杂的算法才能搞定,可是这篇文章将会跳过此处,如果你只是对算法和自然语言学感兴趣的话,就只有 ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- jQuery MD5 加密
一 MD5 概述 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value) ...
- 【Android端 adb相关】adb相关总结
一.什么是adb? adb的全称是:Android Debug Bridge,adb命令的构成是三部分,分别是:服务器.客户端.后台程序: (1)客户端:一个在PC上运行的客户端.可以通过shell端 ...