1. 程式人生 > >PHP指令碼快速比較兩個mysql表結構的差異

PHP指令碼快速比較兩個mysql表結構的差異

<?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; }