本文主要和大家分享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 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"]);?>
相关推荐:
以上是php数据库比较工具分享的详细内容。更多信息请关注PHP中文网其他相关文章!

是的,JavaScript的引擎核心是用C语言编写的。1)C语言提供了高效性能和底层控制,适合JavaScript引擎的开发。2)以V8引擎为例,其核心用C 编写,结合了C的效率和面向对象特性。3)JavaScript引擎的工作原理包括解析、编译和执行,C语言在这些过程中发挥关键作用。

JavaScript是现代网站的核心,因为它增强了网页的交互性和动态性。1)它允许在不刷新页面的情况下改变内容,2)通过DOMAPI操作网页,3)支持复杂的交互效果如动画和拖放,4)优化性能和最佳实践提高用户体验。

C 和JavaScript通过WebAssembly实现互操作性。1)C 代码编译成WebAssembly模块,引入到JavaScript环境中,增强计算能力。2)在游戏开发中,C 处理物理引擎和图形渲染,JavaScript负责游戏逻辑和用户界面。

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境