PHP脚本快速比较两个mysql表结构的差异

原创 2015年12月03日 17:17:32
事情的开头总是有原因的,由于项目数据库设计的时候没有长远考虑,总是不停的修改数据库.在一些应用上,总会有几个开发服务器,比如测试服务器~,外网服务器等等,而每次我修改的时候只改了本地的服务器数据库的结构,经常导致代码部署到外网测试服务器就挂了,调查了半天才发现是数据库差字段..然而每次的调查都很麻烦,看log,看日志.于是我写下了这段脚本.
<?php  
$dbname1="lzt";
$dbname2="lzt";
$dsn1="mysql:host=192.168.1.90;port=3306;dbname=".$dbname1;//数据库连接1
$dsn2="mysql:host=121.40.121.1;port=3306;dbname=".$dbname2;//数据库连接2


$db1=new PDO($dsn1,"root","fuck1314");
$db2=new PDO($dsn2,"root","fuck1314");
echo "------------------------------------------------------------------------------------------</br>";
echo "--------------------------表检查----------------------------------------------------------</br>";
$sql="show  tables";
$stmt1=$db1->query($sql);
$stmt1->setFetchMode(PDO::FETCH_NUM);
$rs1= $stmt1->fetchAll();

$stmt2=$db2->query($sql);
$stmt2->setFetchMode(PDO::FETCH_NUM);
$rs2= $stmt2->fetchAll();
$rs= check($rs1,$rs2);
//dump($rs);
Pr($rs);
echo "------------------------------------------------------------------------------------------</br>";
echo "数据格式:TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,CHARACTER_SET_NAME,COLUMN_KEY,EXTRA</br>";
echo "数据格式:表名,列名,列类型,是否允许空,字符编码集,属性,扩展</br>";
$sql="SELECT TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,CHARACTER_SET_NAME,COLUMN_KEY,EXTRA 
from information_schema.COLUMNS where  TABLE_SCHEMA=";
//比较表名,列名,列的类型,是否为空,字符编码,属性,扩展这几个属性.
$stmt1=$db1->query($sql."'".$dbname1."'");
$stmt1->setFetchMode(PDO::FETCH_NUM);
$rs1= $stmt1->fetchAll();

$stmt2=$db2->query($sql."'".$dbname2."'");
$stmt2->setFetchMode(PDO::FETCH_NUM);
$rs2= $stmt2->fetchAll();
$rs= check($rs1,$rs2);
Pr($rs);

//---------------------------------------------功能函数
//Print Array   其实没用上...
function dump($vars, $label = '', $return = false) {
    if (ini_get('html_errors')) {
        $content = "<pre>\n";
        if ($label != '') {
            $content .= "<strong>{$label} :</strong>\n";
        }
        $content .= htmlspecialchars(print_r($vars, true));
        $content .= "\n</pre>\n";
    } else {
        $content = $label . " :\n" . print_r($vars, true);
    }
    if ($return) { return $content; }
    echo $content;
    return null;
}
//Print Tbale   把结果用表格打印出来
function Pr($arr)
{
    $base="<div class=\"list\">
    <table width=\"454\"  border=\"1\" cellpadding=\"2\" cellspacing=\"1\">
        <col width=\"150\" />
        <col width=\"150\" />
        <tr>
            <th>DSN1</th>
            <th>DSN2</th>
        </tr>";
       foreach ($arr as $key => $value) {
            $v1=implode(",",$value['A']);
            $v2=implode(",",$value['B']);
            $base=$base."<tr>
            <td>$v1</td>        
            <td>$v2</td>                        
            </tr>";
        } 
        $base=$base." </table>";
        echo $base;
}
//数据检查  
function check($arr1,$arr2){
$arr3=array();
foreach ($arr1 as $key => $value) {
    if(!in_array($value,$arr2,true)){
        //如果A不在B里 则证明B里没有这个字段或表...则存起来.
        $arr3[]=array("A"=>$value,
            "B"=>array("null"));
    }
}
//逆向遍历一下.
foreach ($arr2 as $key => $value) {
    if(!in_array($value,$arr1,true)){

        $arr3[]=array("B"=>$value,
            "A"=>array("null"));
    }
}

return $arr3;
}

这就是结果图

运行方式也很简单,放在你的php服务器的webroot根目录,然后在浏览器调用一下就可以咯.

相信大家看到这段代码之后会觉得,怎么这么简单,我一开始是想去找工具的,没想到都要收费,所以就只能自己动手了..本文也提供了一些思路….如果你要比较table的数据得话,除了耗费的时间久一点,其他应该是没什么问题咯…

版权声明:本文为博主原创文章,转载请标明来自于http://blog.csdn.net/venusic。

相关文章推荐

数据库表结构比对工具

一、概述        在软件实施过程中,我遇到了这么一个问题,我在客户那边安装了整个ERP程序并且向数据库中导入了客户提供给我的基础资料,程序进入试运行阶段,在试运行期间,客户反映出程序的各种问题,...

比较两个mysql数据库表结构的差异

需求来源:一个线上系统,一个开发系统,现在要把开发系统更新到线上,但是开发系统的数据库结构与线上的略有差异,所以需要找出两个数据库的表结构差异。 数据库表结构的差异 注:操作均在Linux系统...

PHP一键比对更新MYSQL数据库的一些想法

帮一个朋友维护CMS,具体的还要有一键远程匹配数据库的功能。 当时给的需求是: 1.能够一键比对远程服务器上的数据库的表和字段。 2.比对完成后,如果发现某表或者某字段缺...

利用Navicat实现MySQL数据库结构对比和同步

在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create、modify、drop等进...

一个简单比较oracle两个用户下表数据差异的python脚本

分享一个脚本,用于比较数据差异。     日常工作中经常遇到这么一种情况,在数据迁移或者备份数据恢复等工作时,必须要比较两个用户下表的数据(主要是条数)是否一致,是否有漏数据的情况。虽然使用...
  • mhmds
  • mhmds
  • 2016-11-08 18:09
  • 830

两个数据库比较 对比视图存储过程及表结构差异

两个数据库比较 对比视图存储过程及表结构差异 一、视图和存储过程比较 【原理】利用系统表“sysobjects"和系统表“syscomments”,将数据库中的视图和存储过程进行对比。系统表"...
  • cowbo
  • cowbo
  • 2016-06-28 11:39
  • 1649

两个数据库比较 对比视图存储过程及表结构差异

sqlserver数据库表结构、存储过程、视图的比较脚本,并返回差异结果。

MYSQL比较两个数据库中表和字段的差异

MYSQL比较两个数据库中表和字段的差异
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)