PHP指令碼快速比較兩個mysql表結構的差異
阿新 • • 發佈:2019-01-04
<?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;
}