php的mysql数据库对比代码

php的mysql数据库对比代码。来自:这里

<?php

$dbhost='127.0.0.1'; //服务器
$dbuser='root'; //用户名
$dbpw='comet'; //密码
$dbname='cacti'; //数据库名
$dbname1='cacti-nopia'; //数据库名

header("Content-type:text/html; char=gbk");
mysql_connect($dbhost,$dbuser,$dbpw) or die('数据库连接失败');
mysql_query("set names utf8");
mysql_select_db($dbname) or die('找不到数据库');
echo '<style>*{font-size:12px;}.fenlei{width:250px;float:left;display:inline;}.pic{height:60px;float:left;display:inline;}</style>';

$tb_names=mysql_list_tables($dbname);

$tables_one=array(); //表名数组

/* 数据库所有表 */
while($row=mysql_fetch_row($tb_names)){
$tables_one[]=$row[0];
}
echo '<font style="font-size:24px" color=red>'.$dbname.'</font>该数据库含有<font color=red>'.count($tables_one).'</font>个表,显示如下:<br>';
echo '<div class="fenlei"></div>';
foreach($tables_one as $v){
echo '<div class="fenlei">'.$v.'</div>';
}
echo '</table>';

/* 结构显示 */
$the_one = array();

for($i=0;$i<count($tables_one);$i++){
//获取表结构,此处可以改造成 show columns from 表名 的方式直接获取表结构。本文采用的是获取表头
$query=mysql_query("select * from `".$tables_one[$i]."` limit 1;");
while($row=mysql_fetch_field($query)){
$fd.=str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
$the_one[$tables_one[$i]][] = $row->name;
$the_one[$tables_one[$i].'_detail'][] = str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
}
$fd=substr($fd,0,-1)."\n";
$fd=str_replace(",",",\n",$fd);

unset($fd);
}

echo "\n<br><br><br><br>===============================分割线===================================<br><br><br><br>";

mysql_connect($dbhost,$dbuser,$dbpw) or die('数据库连接失败');
mysql_query("set names utf8");
mysql_select_db($dbname1) or die('找不到数据库');
echo '<style>*{font-size:12px;}.fenlei{width:250px;float:left;display:inline;}.pic{height:60px;float:left;display:inline;}</style>';

$tb_names=mysql_list_tables($dbname1);

$tables_two=array(); //表名数组

/* 数据库所有表 */
while($row=mysql_fetch_row($tb_names)){
$tables_two[]=$row[0];
}
echo '<font style="font-size:24px" color=red>'.$dbname1.'</font>该数据库含有<font color=red>'.count($tables_two).'</font>个表,显示如下:<br>';
echo '<div class="fenlei"></div>';
foreach($tables_two as $v){
echo '<div class="fenlei">'.$v.'</div>';
}
echo '</table>';

/* 结构显示 */
$the_two = array();

for($i=0;$i<count($tables_two);$i++){
$query=mysql_query("select * from `".$tables_two[$i]."` limit 1;");
while($row=mysql_fetch_field($query)){
$fd.=str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
$the_two[$tables_two[$i]][] = $row->name;
$the_two[$tables_two[$i].'_detail'][] = str_pad(" ",2).$row->name." ".$row->type."(".$row->max_length."),<br>";
}
$fd=substr($fd,0,-1)."\n";
$fd=str_replace(",",",\n",$fd);
unset($fd);
}

echo "\n<br><br><br><br>==============================表对比==================================<br><br><br><br>";

$diff_1 = array_diff($tables_one,$tables_two);
$diff_2 = array_diff($tables_two,$tables_one);
if(empty($diff_1) && empty($diff_2)){
echo "数据库表一样";
}
if($diff_1){
echo "{$dbname1}少{$dbname} <font style='font-size:24;color:red'>".count($diff_1)."</font> 张表。表名:".implode(",",$diff_1);
}
if($diff_2){
echo "{$dbname}少{$dbname1} <font style='font-size:24;color:red'>".count($diff_2)."</font> 张表。表名:".implode(",",$diff_2);
}
if($diff_1 || $diff_2 ){
echo "请先对照好数据库表再进行表结构对比";
exit();
}

echo "<br><br><br><br>=============================={$dbname}与{$dbname1}表结构对比(只显示{$dbname}表比{$dbname1}多的字段,不显示{$dbname1}比{$dbname}多的字段)==================================<br><br><br><br>";
$have = true;
for($i=0;$i<count($tables_one);$i++){
$diff_struct = array();
$diff_struct[$tables_one[$i]] = array_diff($the_one[$tables_one[$i]],$the_two[$tables_two[$i]]);
if($diff_struct[$tables_one[$i]]){
$have = FALSE;
echo $tables_one[$i]."中,多".implode(',',$diff_struct[$tables_one[$i]])."字段<br>";
}
}
$have = TRUE;
echo "<br><br><br><br>=============================={$dbname1}与{$dbname}表结构对比(只显示{$dbname1}表比{$dbname}多的字段,不显示{$dbname}比{$dbname1}多的字段)==================================<br><br><br><br>";
for($i=0;$i<count($tables_two);$i++){
$diff_struct = array();
$diff_struct[$tables_two[$i]] = array_diff($the_two[$tables_two[$i]],$the_one[$tables_one[$i]]);
if($diff_struct[$tables_two[$i]]){
$have = FALSE;
echo $tables_two[$i]."中,多".implode(',',$diff_struct[$tables_two[$i]])."字段<br>";
}
}

if($have){
echo "数据库表结构一样";
}
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据