Based on Haim's answer, I created PHP code to test and display all the differences between the two databases. It will also be displayed if the table is present in the source or test databases. You must change the contents of <> variables with your data.
<?php $User = "<DatabaseUser>"; $Pass = "<DatabasePassword>"; $SourceDB = "<SourceDatabase>"; $TestDB = "<DatabaseToTest>"; $link = new mysqli( "p:". "localhost", $User, $Pass, "" ); if ( mysqli_connect_error() ) { die('Connect Error ('. mysqli_connect_errno() .') '. mysqli_connect_error()); } mysqli_set_charset( $link, "utf8" ); mb_language( "uni" ); mb_internal_encoding( "UTF-8" ); $sQuery = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="'. $SourceDB .'";'; $SourceDB_Content = query( $link, $sQuery ); if ( !is_array( $SourceDB_Content) ) { echo "Table $SourceDB cannot be accessed"; exit(0); } $sQuery = 'SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="'. $TestDB .'";'; $TestDB_Content = query( $link, $sQuery ); if ( !is_array( $TestDB_Content) ) { echo "Table $TestDB cannot be accessed"; exit(0); } $SourceDB_Tables = array(); foreach( $SourceDB_Content as $item ) { $SourceDB_Tables[] = $item["TABLE_NAME"]; } $TestDB_Tables = array(); foreach( $TestDB_Content as $item ) { $TestDB_Tables[] = $item["TABLE_NAME"]; } //var_dump( $SourceDB_Tables, $TestDB_Tables ); $LookupTables = array_merge( $SourceDB_Tables, $TestDB_Tables ); $NoOfDiscrepancies = 0; echo " <table border='1' width='100%'> <tr> <td>Table</td> <td>Found in $SourceDB (". count( $SourceDB_Tables ) .")</td> <td>Found in $TestDB (". count( $TestDB_Tables ) .")</td> <td>Test result</td> <tr> "; foreach( $LookupTables as $table ) { $FoundInSourceDB = in_array( $table, $SourceDB_Tables ) ? 1 : 0; $FoundInTestDB = in_array( $table, $TestDB_Tables ) ? 1 : 0; echo " <tr> <td>$table</td> <td><input type='checkbox' ". ($FoundInSourceDB == 1 ? "checked" : "") ."></td> <td><input type='checkbox' ". ($FoundInTestDB == 1 ? "checked" : "") ."></td> <td>". compareTables( $SourceDB, $TestDB, $table ) ."</td> </tr> "; } echo " </table> <br><br> No of discrepancies found: $NoOfDiscrepancies "; function query( $link, $q ) { $result = mysqli_query( $link, $q ); $errors = mysqli_error($link); if ( $errors > "" ) { echo $errors; exit(0); } if( $result == false ) return false; else if ( $result === true ) return true; else { $rset = array(); while ( $row = mysqli_fetch_assoc( $result ) ) { $rset[] = $row; } return $rset; } } function compareTables( $source, $test, $table ) { global $link; global $NoOfDiscrepancies; $sQuery = " SELECT column_name,ordinal_position,data_type,column_type FROM ( SELECT column_name,ordinal_position, data_type,column_type,COUNT(1) rowcount FROM information_schema.columns WHERE ( (table_schema='$source' AND table_name='$table') OR (table_schema='$test' AND table_name='$table') ) AND table_name IN ('$table') GROUP BY column_name,ordinal_position, data_type,column_type HAVING COUNT(1)=1 ) A; "; $result = query( $link, $sQuery ); $data = ""; if( is_array( $result ) && count( $result ) > 0 ) { $NoOfDiscrepancies++; $data = "<table><tr><td>column_name</td><td>ordinal_position</td><td>data_type</td><td>column_type</td></tr>"; foreach( $result as $item ) { $data .= "<tr><td>". $item["column_name"] ."</td><td>". $item["ordinal_position"] ."</td><td>". $item["data_type"] ."</td><td>". $item["column_type"] ."</td></tr>"; } $data .= "</table>"; return $data; } else { return "Checked but no discrepancies found!"; } } ?>
Bogdan Draganica Jan 29 '17 at 0:41 2017-01-29 00:41
source share