Heim > Web-Frontend > js-Tutorial > Hauptteil

Teilen von PHP-Datenbankvergleichstools

小云云
Freigeben: 2018-03-28 15:27:00
Original
1710 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich das PHP-Datenbankvergleichstool vorgestellt. Die Versionsiteration erfordert den Vergleich verschiedener Datenbankversionen und das Schreiben von Upgrade-Skripts für Datenbanken niedrigerer Versionen. Verwenden Sie PHP, um ein Datenbankvergleichstool zu schreiben. Ohne PHP hat es einen Tag gedauert.

Funktion: Vergleichen Sie zwei verschiedene Versionen der Datenbanken src und dst, generieren Sie SQL-Dateien, um src auf dst zu aktualisieren

<?phpdefine("DSN",&#39;mysql:host=127.0.0.1;port=3306;dbname=gmsys&#39;);//gm数据库配置define("SRC_DB","ea_role");
define("TARGET_DB","game_role");
define("USER","LiMing");
define("PASS","");
define("FILE_NAME","updateSQL.sql");//获取数据库结构//数据库名称,链接,返回所有表,所有表的结构<tableName,<tableName,fields>>,表的属性值function getDBStructure($db_name,$pdo,&$tables,&$db_stru,&$table_status){
    # code...
    //获取SRC_DB 的数据库结构
    $pdo->query("use ".$db_name);
    print_r("<pre class="brush:php;toolbar:false">");    //表属性
    foreach ($pdo->query("show table status") as $key => $value) {        # code...
        $table_status[$value[0]] = $value;

    }    //echo PHP_EOL;

    foreach ($pdo->query("show tables") as $key => $value) {        # code...
        $tables[$key] = $value[0];//表名
        //echo $value[0]."|";
    }    //echo PHP_EOL;
    foreach ($tables as $key => $name) {        # code...
        //echo $name .PHP_EOL;
        $table = null;//记得初始化
        foreach ($pdo->query("desc ".$name) as $key => $value) {            # code...
            $table[$value[0]] = $value; //字段名 ——> 字段属性
            //echo $value[0] ."|";
        }        //echo PHP_EOL;
        $db_stru[$name] = $table; //表名 -> 表结构
    }

}//生成创建数据库的sql// 表名  表结构function createTableSQl($name,$table){
    # code...
    $pri_key =  array();    $mul_key =  array();    $sql = "CREATE TABLE `{$name}` (";    foreach ($table as $key => $value) {        # code...
        $field = $value[0];//字段名
        $type = $value[1]; //字段类型
        $null = $value[2]; //是否为空 YES NO
        $key = $value[3]; //PRI MUL
        $default = $value[4]; //字段类型 
        $extal = $value[5];//
        $isNUll = "";        if ($null == "YES") {            # code...
            $isNUll = "not null";
        }        //$defaultMsg = $default;
        if (!is_null($default)) {            # code...
            $default = " default {$default}";
        }        if ($key == "PRI") {            # code...
            array_push($pri_key, $field);
        }        else if ($key == "MUL") {            # code...
            array_push ($mul_key, $field);
        }        //拼接字符串
        $row = "`{$field}` {$type} {$isNUll} {$default},";        $sql = $sql . PHP_EOL . $row  ;
    }    //添加主键
    if (!empty($pri_key)) {    # code...

        $sql = $sql . PHP_EOL."PRIMARY KEY (";        foreach ($pri_key as $v) {            # code...
            $sql = $sql."`{$v}`,";
        }        $sql = substr($sql, 0,strlen($sql)-1);        $sql = $sql . ")," ;
    }        //拼接主键
    if (!empty($mul_key)) {        # code...

        foreach ($mul_key as  $v) {            # code...
            $sql = $sql . PHP_EOL . "key `{$v}` ({$v}),";
        }
    }    $sql = substr($sql, 0,strlen($sql)-1);//去掉最后一个‘,’

    $sql = $sql . PHP_EOL . ");".PHP_EOL;    return $sql;
}//生成update文件// $fields <tabName,field>//ALTER TABLE `familyer`  ADD COLUMN   `joinfightdata` blob AFTER `ssfightblob`;function genUpdateSQL($fields){
    $updateSql=null ;    foreach ($fields as $tab_name => $value) {        # code...
        foreach ($value as $key => $v) {            # code...
            $isNUll = "";            if ($v[2] == "YES") {                # code...
                $isNUll = "NOT NULL";
            }            $default = $v[4];            if (!is_null($default)) {                # code...
                $default = " default {$default}";
            }            $updateSql = $updateSql . "ALTER TABLE `{$tab_name}` ADD COLUMN `{$v[0]}` {$v[1]} {$isNUll} {$default};".PHP_EOL;
        }        $updateSql = $updateSql.PHP_EOL;
    }    return $updateSql;
}//比价数据库结构//dst_db 有 src_db 没有 返回表字段数组function cmp($src_db,$dst_db){
    $tables =array();//dst有 但是src中没有的表 <tale>
    $fields = array();//表名 -> <字段名,字段属性>
    foreach ($dst_db as $key => $value) {        # code...
        if ( array_key_exists($key,$src_db) ) {//如果存在比较字段
            # code...
            $tmp = array_diff_key($value,$src_db[$key]);            if ( !empty($tmp) )  {                # code...
                $fields[$key]=$tmp;
            }
        }        else
            array_push($tables,$key);
    }    return $fields;
}$pdo = new PDO(DSN, USER, PASS);//创建数据库链接//源数据库结构$src_tables= NULL;//表名数组$src_db = NULL;    //数据库结构 表名->表字段$src_table_status = NULL; //表属性 name -> 属性getDBStructure(SRC_DB,$pdo,$src_tables,$src_db,$src_table_status);//目的数据库结构$dst_tables =NULL;$dst_db=null;$dst_table_status=null;
getDBStructure(TARGET_DB,$pdo,$dst_tables,$dst_db,$dst_table_status);$cmp_table = array_diff($dst_tables,$src_tables);$cmp_fields = cmp($src_db,$dst_db);//print_r($cmp_table);$text = null;foreach ($cmp_table as  $value) {    # code...
    if ( !strchr($value,"pvprankreward") ) {        # code...
        $text = $text.createTableSQl($value,$dst_db[$value]);
    }

}$text = $text . genUpdateSQL($cmp_fields);$myfile = fopen(FILE_NAME,"w");
fwrite($myfile, $text);
fclose($myfile);//对比数据库结构 返回差异 表//cmp($dst_db,$src_db);//对比表结构返回有差异的表//$str = createTableSQl($src_tables[0],$src_db[$src_tables[0]]);//$myfile = fopen("SQL.sql","w");//fwrite($myfile, $str);//fclose($myfile);// print_r("<pre class="brush:php;toolbar:false">");//print_r($src_db["pvprankreward170525"]);//print_r($src_table_status["role"]);?>
Nach dem Login kopieren

Verwandte Empfehlungen:

PHP-Datenbankbetriebsaufzeichnung

Detaillierte Erläuterung häufig verwendeter Funktionen in der PHP-Datenbank

Permanente PHP-Datenbankverbindung

Das obige ist der detaillierte Inhalt vonTeilen von PHP-Datenbankvergleichstools. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!