HOWTOlabs  
 Services     Software     Commentary     Design     Astral Musings   
MySQL/PHP
Schema checking script

Here's a PHP script that can be run from the command line to show a database's schema, look for matching fields in different tables, and identify matching field pairs that may be poorly normalized.

...
<?php

//  command -d [database] -h [hostname] -u [user] -p [password] [fieldname] [ fieldname]
//
//  If no field names are provided, displays list of all tables and fields
//  If one field name, displays list of only tables that include at that field
//  If two field names, displays list only of tables that include both field names
//
//  https://bugs.nor1solutions.com/show_bug.cgi?id=2498

$dbname 'dev';
$host =   'localhost';
$user =   'root';
$passwd 'root';

for (
$i 1$i $_SERVER['argc']; $i++) {
    if (
$i === $db) {
        
$dbname $_SERVER["argv"][$i];
        continue;
        }
    if (
$i === $hs) {
        
$host $_SERVER["argv"][$i];
        continue;
        }
    if (
$i === $us) {
        
$user $_SERVER["argv"][$i];
        continue;
        }
    if (
$i === $pw) {
        
$passwd $_SERVER["argv"][$i];
        continue;
        }
    if (
$_SERVER["argv"][$i] == '-d') {
        
$db $i 1;
        continue;
        }
    if (
$_SERVER["argv"][$i] == '-h') {
        
$hs $i 1;
        continue;
        }
    if (
$_SERVER["argv"][$i] == '-u') {
        
$us $i 1;
        continue;
        }
    if (
$_SERVER["argv"][$i] == '-p') {
        
$pw $i 1;
        continue;
        }
    if (!isset(
$fn))
        
$fn $i;
    if (isset(
$fn)) {
        if (
$i == $fn)
            
$m[0] = $_SERVER["argv"][$i];
        if (
$i == ($fn ))
            
$m[1] = $_SERVER["argv"][$i];
        continue;
        }
    }

if (!
mysql_connect($host$user$passwd)) {
    echo 
'Could not connect to mysql';
    exit;
}

$sql "SHOW TABLES FROM $dbname";
$result mysql_query($sql);

if (!
$result) {
    echo 
"DB Error, could not list tables\n";
    echo 
'MySQL Error: ' mysql_error();
    exit;
}

mysql_select_db($dbname) or die("mysql_select() failed");
while (
$row mysql_fetch_row($result)) {
    
$query "select * from ".$row[0]." limit 1";
    if (!isset(
$m[0]))
        echo 
"Table: {$row[0]}\n";
    
$res2 mysql_query($query) or die(mysql_error());
    
$colqty mysql_num_fields($res2);
    
$t 0;
    for (
$i 0$i $colqty$i++) {
        if (isset(
$_SERVER["argv"][2])) {
            if (
preg_match("/".$m[0]."/i"mysql_field_name($res2$i))) {
                
$m1 mysql_field_name($res2$i);  $t++;
                }
            }
        if (isset(
$m[1])) {
            if (
preg_match("/".$m[1]."/i"mysql_field_name($res2$i))) {
                
$m2 mysql_field_name($res2$i);  $t++;
                }
            }
        if (!isset(
$m[0]))
            echo 
"\t".mysql_field_name($res2$i)."\n";
        }
    if (isset(
$m[1])) {
        if (
$t == 2) {
            echo 
"Table: {$row[0]}\n";
            echo 
"\t".$m1."\n";
            echo 
"\t".$m2."\n";
            }
        }
    else if (isset(
$m[0])) {
        if (
$t == 1) {
            echo 
"Table: {$row[0]}\n";
            if (isset(
$m1)) echo "\t".$m1."\n";
            if (isset(
$m2)) echo "\t".$m2."\n";
            }
        }
    unset(
$m1);
    unset(
$m2);
    }

mysql_free_result($result);
?>

zap technologies
tablet | printable