最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

php数据库比较工具分享

来源:动视网 责编:小采 时间:2020-11-27 19:58:06
文档

php数据库比较工具分享

php数据库比较工具分享:本文主要和大家分享php数据库比较工具,版本迭代需要对比不同版本的数据库,为低版本的数据库编写升库脚本。使用php编写数据库比较工具。没有用过php耗时一天。 功能:比较两个不同版本的数据库src和dst, 生成SQL文件 将src升级为dst<phpde
推荐度:
导读php数据库比较工具分享:本文主要和大家分享php数据库比较工具,版本迭代需要对比不同版本的数据库,为低版本的数据库编写升库脚本。使用php编写数据库比较工具。没有用过php耗时一天。 功能:比较两个不同版本的数据库src和dst, 生成SQL文件 将src升级为dst<phpde


本文主要和大家分享php数据库比较工具,版本迭代需要对比不同版本的数据库,为低版本的数据库编写升库脚本。使用php编写数据库比较工具。没有用过php耗时一天。

功能:比较两个不同版本的数据库src和dst, 生成SQL文件 将src升级为dst

<?phpdefine("DSN",'mysql:host=127.0.0.1;port=3306;dbname=gmsys');//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>"); //表属性
 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>");//print_r($src_db["pvprankreward170525"]);//print_r($src_table_status["role"]);?>

文档

php数据库比较工具分享

php数据库比较工具分享:本文主要和大家分享php数据库比较工具,版本迭代需要对比不同版本的数据库,为低版本的数据库编写升库脚本。使用php编写数据库比较工具。没有用过php耗时一天。 功能:比较两个不同版本的数据库src和dst, 生成SQL文件 将src升级为dst<phpde
推荐度:
标签: 分享 工具 php
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top