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