$fields) { $result = mysql_query("SHOW COLUMNS FROM `" . $table_name . "`", $db); while ($row = mysql_fetch_assoc($result)) { $tables[$table_name][$row['Field']] = $row; } } mysql_close(); $data = array( 'name' => $name, 'time' => time(), 'tables' => $tables ); return $data; } /** * Compare two schemas (as generated by the 'export' method.) * * @param string $schema1 The first database schema. * @param string $schema2 The second database schema. * @return array The results of the comparison. */ function compare($schema1, $schema2) { $tables1 = array_keys($schema1['tables']); $tables2 = array_keys($schema2['tables']); $tables = array_unique(array_merge($tables1, $tables2)); $results = array(); foreach ($tables as $table_name) { // Check tables exist in both databases if (!isset($schema1['tables'][$table_name])) { $results[$table_name][] = '' . $schema1['name'] . ' is missing table: ' . $table_name . '.'; continue; } if (!isset($schema2['tables'][$table_name])) { $results[$table_name][] = '' . $schema2['name'] . ' is missing table: ' . $table_name . '.'; continue; } // Check fields exist in both tables $fields = array_merge($schema1['tables'][$table_name], $schema2['tables'][$table_name]); foreach ($fields as $field_name => $field) { if (!isset($schema1['tables'][$table_name][$field_name])) { $results[$table_name][] = '' . $schema1['name'] . ' is missing field: ' . $field_name . ''; continue; } if (!isset($schema2['tables'][$table_name][$field_name])) { $results[$table_name][] = '' . $schema2['name'] . ' is missing field: ' . $field_name . ''; continue; } // Check that the specific parameters of the fields match $s1_params = $schema1['tables'][$table_name][$field_name]; $s2_params = $schema2['tables'][$table_name][$field_name]; foreach ($s1_params as $name => $details) { if ($s1_params[$name] != $s2_params[$name]) { $results[$table_name][] = 'Field ' . $field_name . ' differs between databases for parameter \'' . $name . '\'. ' . $schema1['name'] . ' has \'' . $s1_params[$name] . '\' and ' . $schema2['name'] . ' has \'' . $s2_params[$name] . '\'.'; } } } } return $results; } } ?>