用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 ...
随机推荐
- 解决在linux环境安装setuptools的相关错误
RuntimeError: Compression requires the (missing) zlib module 缺少zlib包 解决方案 yum install zlib yum i ...
- jQuery 替换元素
参考https://www.cnblogs.com/halai/p/6868027.html http://www.w3school.com.cn/jquery/manipulation_replac ...
- java面试:HR面
就算技术面全都答对了,有时也会因为HR面没有认真对待而拿不到offer. HR的想法 找工作难,招人也好难.HR想要招什么样的人? 稳定.如果你跳槽频繁,HR可能会担心你干了没一年就跑路了,她又得重新 ...
- STL::map/multimap
map: 默认根据 key 排序(从小到大),能够通过 backet operator(operator [ ]) 来获取元素,内部由二叉搜索树来实现(binary search trees). mu ...
- http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关
做成功这道逆向题了,哈哈哈哈. 启程. 运行了一下子程序,发现它是要保证所有灯亮着才会给flag.如下图所示. 我聪明滴认为首先可以通过关键字符串找到关键代码位置哦. 1.找到关键代码 ...
- Wechat微信公众平台开发
一.微信概述 1.历史背景 1)2011年1月21日,腾讯推出微信应用程序.(张小龙) 2)2012年8月20日,腾讯推出微信公众平台功能,同年11月开放第三方接口 3)2013年11月注册用户量突破 ...
- 27-java String 之间比较的幺蛾子
仔细看啊, 他有双引号啊!!!!
- IE6、7下overflow:hidden失效的问题
问题产生原因: 当父元素的直接子元素或者下级子元素的样式拥有position:relative或者position:absolute属性时,父元素的overflow:hidden属性就会失效. 例如: ...
- PowerDesigner生成数据字典
1.首先说明我使用的环境 2.打开PDM模型,右键-->NEW-->REPORT 3.数据字典编辑器(一些通用模型吧,自己可以再DIY) 4.选择Table-->List of Ta ...
- 梦殇 chapter six
如行尸走肉般的坐在教室,看著书上密密麻麻的字,心却久久不能平静. 自己已经不再是当初那个懵懂,无知的小女孩了.仰望天空45度,让眼泪流回眼睛. 是该告别彷徨,告别懵懂的年纪了. 早些年许下的诺言,如今 ...