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。

php 比较mysql表结构并同步

  • 2014年06月10日 11:28
  • 11KB
  • 下载

mysql  比较两表数据差异

select pnumber,pmoney from productinfo A where not exists (select * from nproductinfo B where A.pnum...
  • u012635819
  • u012635819
  • 2015年04月02日 15:08
  • 2337

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

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

mysql对比表结构对比同步,sqlyog架构同步工具

mysql对比表结构对比同步,sqlyog架构同步工具 对比后的结果示例: 执行后的结果示例: 点击:"另存为(S)" 按钮可以把更新sql导出来。...
  • xiaobing_122613
  • xiaobing_122613
  • 2017年06月09日 09:29
  • 824

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

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

mysql比对两个数据库表结构的方法

本文介绍mysql比对两个数据库表结构的方法,可以检查出两个数据库表的差异,并获取更新sql语句消除表之间的差异。提供完整操作步骤与实例,方便大家比对数据库表结构时使用。...
  • fdipzone
  • fdipzone
  • 2017年12月24日 13:02
  • 37742

mysql表结构对比

  • 2013年09月15日 16:29
  • 10KB
  • 下载

利用shell脚本实现mysql数据库表和表结构的对比

在项目维护和开发中,经常需要知道两个数据库之间有哪些差异,如两个数据库中数据表有什么不同(表的名称,数量),相同的表字段是否相同(字段数目,约束,字段类型,大小等),有各种数据库管理工具可以实现这一点...
  • m0_37674755
  • m0_37674755
  • 2017年11月03日 23:34
  • 186

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

php脚本比较两个mysql数据的差异.
  • venusic
  • venusic
  • 2015年12月03日 17:17
  • 1962

数据库间表结构对比和数据对比

概述       对于企业软件开发或实施人员,在软件实施过程中,经常会遇到了这么一个问题,我们在客户那边安装了整个ERP程序并且向数据库中导入了客户提供给我的基础资料,程序进入试运行阶段,在试运行期间...
  • swordmanli
  • swordmanli
  • 2018年02月13日 11:41
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP脚本快速比较两个mysql表结构的差异
举报原因:
原因补充:

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