mysql数据库本地化操作

<?php

    if(!defined('SITE_PATH')){

        define('SITE_PATH',dirname(dirname(__FILE__)));

    }

    $dbconfig=include(SITE_PATH.'/Conf/config.php');

    $database=$dbconfig['DB_NAME'];

    $server=$dbconfig['DB_HOST'];

    $port=$dbconfig['DB_PORT'];

    $user=$dbconfig['DB_USER'];

    $pw=$dbconfig['DB_PWD'];

    $pre=$dbconfig['DB_PREFIX'];



    $conn= mysql_connect($server.':'.$port, $user, $pw);

    //@mysql_query('CREATE DATABASE IF NOT EXISTS `'.$database.'` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');

    mysql_select_db($database,$conn) or die('select db error');

    $tables=array();

    foreach (glob(SITE_PATH."/db/*.php") as $filename) {    //获取文件夹中的路径

       if(basename($filename)!='index.php'&&basename($filename)!='pre.php'){    //排除文件夹中的index.php和pre.php

            $tables[str_replace('.php','',basename($filename))]=include($filename); //将文件内容组装成数组,不带后缀的文件名为key,文件中return的数组内容为value

       }

    }

    $sqls=array();

    foreach($tables as $table=>$db){

        //$table 位数据库表名,$db为字段数组

        $sql=array();

        //根据数组中设置的type类型,转换为数据库字段类型

      //  $k 为字段,$v 为字段属性,type,auto,pk等

        foreach($db as $k=>$v){

            if($v['type']=='time'){

                $type='int(10) unsigned';

            }

            elseif($v['type']=='number'){

                $type='int(10)';

            }

            elseif($v['type']=='datetime'){

                $type='datetime';

            }

            elseif($v['type']=='title'){

                $type='varchar(255)';

            }

            elseif($v['type']=='money'){

                $type='decimal(20,2)';

            }

            elseif($v['type']=='mini'){

                $type='tinyint(4)';

            }

            elseif($v['type']=='serialize'){

                $type='text';

            }

            else{

                $type=$v['type'];

            }

            if(isset($v['default'])){

                if($v['default']!=='null'){

                    $type=$type.' DEFAULT \''.$v['default'].'\'';

                }

                else{

                    $type=$type.' DEFAULT NULL';

                }

            }

            else{

                $type=$type.' DEFAULT NULL';

            }

            if($v['auto']){

                $type=$type.' AUTO_INCREMENT';

            }

            $sql['columns'][$k]='`'.$k.'` '.$type;

            if($v['pk']){

                $sql['key'][$k]='PRIMARY KEY `'.$k.'` (`'.$k.'`)';

            }

            if($v['ukey']){

                $sql['key'][$k]='UNIQUE KEY `'.$k.'` (`'.$k.'`)';

            }

            if($v['key']){

                $sql['key'][$k]='KEY `'.$k.'` (`'.$k.'`)';

            }



        }

        $presql=file_get_contents(SITE_PATH.'/db/sql/sql_'.$pre.$table);



        if($presql){

            $presql=unserialize($presql);

            //        序列化为数据库中字段映射。修改php数组,来影响数据库字段和索引

//            如果序列化中的字段在PHP数组中没有,则将删除字段语句组装进$sqls[],从而达到修改数组中的字段,来影响数据库中字段的效果

            foreach($presql['columns'] as $k=>$v){

                if(!in_array($v,$sql['columns'])){

                    $sqls[]='alter table '.$pre.$table.' drop column '.$k;

                }

            }

//            如果php数组中的字段不在序列化数组中,则将添加该字段

            foreach($sql['columns'] as $k=>$v){

                if(!in_array($v,$presql['columns'])){

                    $sqls[]='alter table '.$pre.$table.' add column '.$v;

                }

            }

//            如果php数组中的索引在序列化中不存在,则删除索引

            foreach($presql['key'] as $k=>$v){

                if(!in_array($v,$sql['key'])){

                    $sqls[]='drop index '.$k.' on '.$pre.$table;

                }

            }

//            如果序列化中的索引在php数组中不存在,则添加索引

            foreach($sql['key'] as $k=>$v){

                if(!in_array($v,$presql['key'])){

                    $sqls[]='alter table '.$pre.$table.' add '.$v;

                }

            }

        }

        else{

            $sqls[$pre.$table]='CREATE TABLE IF NOT EXISTS `'.$pre.$table.'` ('.implode(',',$sql['columns']).','.implode(',',$sql['key']).') ENGINE=InnoDB  DEFAULT CHARSET=utf8';

        }

        file_put_contents(SITE_PATH.'/db/sql/sql_'.$pre.$table,serialize($sql));



    }



    foreach($sqls as $k=>$v){

            mysql_query($v,$conn);

    }

?>

 

你可能感兴趣的:(mysql)