Sqlite数据库转Mysql程序


作者:tamsyn  来源:www.sqlite.com.cn  时间:2007-3-16  【 字体:   】 〖 双击滚屏 〗
 
 
 
          忙了好久从傍晚开始想把第一个项目的sqlite转为mysql,毕竟mysql比较正式点,sqlite也许只能作为玩具,sqlite好多的查询语句都是不标准的,再跟它纠缠下去对自己发展很不利。不过也要感谢它为我学sql有个很好的开始。算来今天是第一次正经的用mysql做点事情。数据库转换的第一件事就是建立跟sqlite对应的表,没有采用什么技巧,直接套用建立sqlite数据库用的sql脚本,亮点就是自动删除已存在的的同名表。接下来的工作就是遍历sqlite中表的结构,采用foreach语句来完成,开始发现读出的数据一直不对,尝试用zend studio的debug功能来查看sqlite_fetch_array返回的数组结构,结果失败了,debug不识别sqlite函数。搞了半天才知道用print_s()函数输出数组结构,发现返回的数值很古怪,每个结果有两个脚标,一个是数字的,一个是表字段名,如下所示:

Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => Admin [name] => Admin [2] => c4ca4238a0b923820dcc509a6f75849b [passwd] => c4ca4238a0b923820dcc509a6f75849b [3] => 0 [class] => 0 [4] => 2005-11-01 10:44:36 [regtime] => 2005-11-01 10:44:36 ) [1] => Array ( [0] => 2 [id] => 2 [1] => 管理员 [name] => 管理员 [2] => c4ca4238a0b923820dcc509a6f75849b [passwd] => c4ca4238a0b923820dcc509a6f75849b [3] => 1 [class] => 1 [4] => 2005-11-05 11:01:51 [regtime] => 2005-11-05 11:01:51 ) )

          想了好久才想出一个取单值办法,并想个办法构造插入sql语句,还好mysql手册中有例程,原本想把表的字段提取出来在用insert into table (字段列表) values(字段对应的值)这种比较啥的方式插入的,经查手册发现,可以直接用insert into table values(字段列表),由于每个表有个主键是auto_increment的,不运行插入具体的值,可用null来插进去。整个代码如下,尝试了php5的错误处理方法,跟java是一样的。还有就是从php5.1.2开始php.ini中short_tags 是off的,这样形如<?=$var?>的标签就不能用,搞得discuz4都装不上。打开后才能装!!
 
转换程序代码:

<?php
include("class/mysql.php");
try{
        
$link=new DB_MySQL();
        
$link->connect();
        
$link->selectdb();
        
$db=sqlite_open("mssql.php");
        
$tables=array("admin","class","config","linkcon","loginlog","content");        
        foreach (
$tables as $value){
                
transfer($value);
        }

        
$link->close();        
}
catch(Exception $e){
        print 
$e->getMessage();
        exit();
}
//数据转移函数,输入值为表名,可自动清空目标表    
function transfer($table)
{
        global 
$link,$db;
        
$query="select id from $table";
        
$link->query($query);
        if(
$link->affected_rows()!=0){
                
$query="truncate $table";
                
$link->query($query);
        }
     
$query="select * from $table";
    
$array=sqlite_array_query($db,$query);
    
$query="insert into $table values (null";
    
$flag=0;
           foreach(
$array as $row){
                   
$i=1;
                   
$j=0;
                   if(
$flag==1)
                           
$query.=",(null";
                   foreach(
$row as $col){
                        if(
$j%2!=&& $j>2){
                                
$query.=',''.$row[$i++].''';
                        }                        
                        
$j++;
                }   
                
$query=$query.")";
                
$flag=1;
          }
   
$link->query($query);
}
?>


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM