PX : code

db-drill by Robert Keen
Download this code


<?
#===============================================
# db-drill                                      
# Copyright (c) 2003, Robert L. Keen            
# db-drill comes with ABSOLUTELY NO WARRANTY    
# Licensed under the AGPL                       
#===============================================
#                                               
# This script allows you to "drill" down through
# a MySQL server with relative ease and speed.  
#                                               
# It will not give you access to any data other 
# than table structures and index information.  
#                                               
# Programmers will find it useful, hopefully... 
#                                               
# If you make any interesting modifications,    
# please inform me at rkeen@keen-online.com     
#                                               
#===============================================
?>

<html>
<head>
<style>
tr,td,th     { font-family: arial; font-size: 11px;  color: black; white-space: nowrap; }
.BlueHeader  { background-color: Gray;   color: DarkBlue; font-size: 12px; font-weight: bold; white-space: nowrap; line-height: 1.2em; }
.TableHeader { background-color: Black;  color: White;    font-size: 12px; font-weight: bold; white-space: nowrap; line-height: 1.2em; }
.WhiteHeader { background-color: 808080; color: White;    font-size: 12px; font-weight: bold; white-space: nowrap; line-height: 1.2em; }
.MainHeading { background-color: c0c0c0; color: Black;    font-size: 14px; font-weight: bold; white-space: nowrap; line-height: 2.0em; }
</style>
</head>
<body>

<?php

#------------------------------------------------
#Modify as needed or desired
#------------------------------------------------
$TESTING      false;
error_reporting( ($TESTING E_ALL 0) );

#------------------------------------------------
# Initialize variables used in this script
#------------------------------------------------
$thisPAGE     $_SERVER["PHP_SELF"];
$thisHILITE   "LightGreen";

#------------------------------------------------
# MySQL login information
#------------------------------------------------
$UserName     "yourDBuser";
$UserPass     "yourDBpass";
$dbHost       "yourDBhost";

#------------------------------------------------
#Connect to the database and get a database handle
#------------------------------------------------
$dbh          mysql_pconnect ("$dbHost""$UserName""$UserPass") or die ("Can't connect to server");

#------------------------------------------------
# Assign URL Parameters to Variables
#------------------------------------------------
$thisDATABASE = (isset($_REQUEST["db"])  ? $_REQUEST["db"]  : "");
$thisTABLE    = (isset($_REQUEST["tbl"]) ? $_REQUEST["tbl"] : "");
$thisACTION   = (isset($_REQUEST["axn"]) ? $_REQUEST["axn"] : "");

#------------------------------------------------
# Start buffering output
#------------------------------------------------
ob_start();

print 
"<table border=0>";

# display the main heading
print "<tr><td colspan=10 class='MainHeading'>&nbsp;DB-DRILL : $rootName @ $dbHost : $thisDATABASE : $thisTABLE</td></tr>";

#------------------------------------------------
# Get a list of available databases on server
#------------------------------------------------
$dbh_rs mysql_query("show databases");

print 
"<td valign=top bgcolor=f0f0f0>";

#------------------------------------------------
# If the query succeeded, display the results
#------------------------------------------------
IF ($dbh_rs AND mysql_num_rows($dbh_rs)) :

  print 
"<table border=0 cellspacing=0 cellpading=0>";
  print 
"<tr><td class='TableHeader'>Databases<td></tr>";

  
#------------------------------------------------
  # Get each database a row at a time
  #------------------------------------------------
  
WHILE ( list($thisDB) = mysql_fetch_row($dbh_rs) ) :

    
# highlight the "current" database
    
$bgColor = ($thisDB == $thisDATABASE "bgcolor='$thisHILITE'" "");
    print 
"<tr><td $bgColor><a href='$thisPAGE?axn=tbl&db=$thisDB'>$thisDB</a><br></td></tr>";

  ENDWHILE;

  print 
"</table>";

#------------------------------------------------
# Otherwise, display appropriate message
#------------------------------------------------
ELSE :
  print 
"<tr><td>No databases found on system server.</td></tr>";
ENDIF;

print 
"</td>";

#------------------------------------------------
# User requested a list of tables
#------------------------------------------------
IF ($thisACTION == "tbl") :

  print 
"<td valign=top>";

  
#------------------------------------------------
  # Make sure that a database is selected
  #------------------------------------------------
  
IF ($thisDATABASE == "") :
    print 
"Database name not given: A list of tables cannot be displayed.";
    EXIT;
  ENDIF;
  
  print 
"<table bgcolor=black cellpadding=0 cellspacing=1 border=0>";
  print 
"<tr bgcolor=808080><th colspan=8 class='TableHeader'>Tables in DB: $thisDATABASE</th></tr>";
  print 
"<tr bgcolor=a0a0a0 style='color:black;'>";
  print 
"<th align=left>&nbsp;Table     &nbsp;</th>";
  print 
"<th align=left>&nbsp;Type      &nbsp;</th>";
  print 
"<th align=left>&nbsp;RowFmt    &nbsp;</th>";
  print 
"<th align=left>&nbsp;Recs      &nbsp;</th>";
  print 
"<th align=left>&nbsp;FileLen   &nbsp;</th>";
  print 
"<th align=left>&nbsp;Created   &nbsp;</th>";
  print 
"<th align=left>&nbsp;LUpdate   &nbsp;</th>";
  print 
"<th align=left>&nbsp;LCheck    &nbsp;</th>";
  print 
"</tr>";

  
#------------------------------------------------
  # Get a list of tables and related information
  #------------------------------------------------
  
$dbh_rs mysql_query("show table status from $thisDATABASE");

  
#------------------------------------------------
  # If the query succeeded, display the results
  #------------------------------------------------
  
IF ($dbh_rs AND mysql_num_rows($dbh_rs)) :
    
#------------------------------------------------
    # Get the tables information a row at a time
    #------------------------------------------------
    
$loop 0;
    WHILE (
$thisROW mysql_fetch_row($dbh_rs)) :

      
# alternate background color for each row
      
$thisBG = ($loop++%"white" "e0e0e0");

      
# display table information
      
print "<tr bgcolor=$thisBG>";
      print 
"<td>&nbsp;<b><a href='$thisPAGE?axn=fld&db=$thisDATABASE&tbl=" $thisROW[0] . "'>" $thisROW[0] . "</a></td>";
      print 
"<td>&nbsp;" $thisROW1] . "&nbsp;</td>";
      print 
"<td>&nbsp;" $thisROW2] . "&nbsp;</td>";
      print 
"<td align=right>&nbsp;" $thisROW3] . "&nbsp;</td>";
      print 
"<td align=right>&nbsp;" $thisROW5] . "&nbsp;</td>";
      print 
"<td>&nbsp;" $thisROW[10] . "&nbsp;</td>";
      print 
"<td>&nbsp;" $thisROW[11] . "&nbsp;</td>";
      print 
"<td>&nbsp;" $thisROW[12] . "&nbsp;</td>";
      print 
"</tr>";

    ENDWHILE;

  
#------------------------------------------------
  # Otherwise, display appropriate message
  #------------------------------------------------
  
ELSE :
    print 
"<tr><th colspan=8 bgcolor=white>No tables were found in this database.</th></tr>";
  ENDIF;

  print 
"</table>";
  print 
"</td>";
  
#------------------------------------------------
# User requested field information from a table
#------------------------------------------------
ELSEIF ($thisACTION== "fld") :

  
#------------------------------------------------
  # Make sure that a database is selected
  #------------------------------------------------
  
IF ($thisDATABASE == "") :
    print 
"Database name not given: A list of tables cannot be displayed.";
    EXIT;
  ENDIF;
  
  
#------------------------------------------------
  # Make sure that a table is selected
  #------------------------------------------------
  
IF ($thisTABLE == "") :
    print 
"Table name not given: A list of fields cannot be displayed.";
    EXIT;
  ENDIF;
  
  
#------------------------------------------------
  # Get a list of tables for navigation purposes
  #------------------------------------------------
  
$dbh_rs mysql_query("show tables from $thisDATABASE");

  
#------------------------------------------------
  # If the query succeeded, display the results
  #------------------------------------------------
  
IF ($dbh_rs AND mysql_num_rows($dbh_rs)) :

    print 
"<td bgcolor=c0c0c0 valign=top>";
    print 
"<table border=0 cellspacing=0 cellpading=0>";
    print 
"<tr><td class='TableHeader'>Tables</td></tr>";
    
    
# Retrieve table information a row at a time
    
WHILE (list($tblName) = mysql_fetch_row($dbh_rs)) :

      
# Highlite the "current" table
      
$bgColor = ($tblName == $thisTABLE "bgcolor='$thisHILITE'" "");
      print 
"<tr><td $bgColor>&nbsp;<a href='$thisPAGE?axn=fld&db=$thisDATABASE&tbl=$tblName'>$tblName</a></td></tr>";

    ENDWHILE;

    print 
"</table>";
    print 
"</td>";
  
#------------------------------------------------
  # Otherwise, display appropriate message
  #------------------------------------------------
  
ELSE :
    print 
"<tr><th colspan=8 bgcolor=white>No tables were found in this database.</th></tr>";
  ENDIF;

  print 
"<td bgcolor=c0c0c0 valign=top>";

  
#------------------------------------------------
  # Get fields list from selected table
  #------------------------------------------------
  
$dbh_rs  mysql_query("show fields from $thisDATABASE.$thisTABLE");
  
  print 
"<table border=0 cellspacing=1 cellpadding=0>";

  
#------------------------------------------------
  # If the query succeeded, display the results
  #------------------------------------------------
  
IF ($dbh_rs) :

    print 
"<tr><td colspan=10 class='TableHeader'>Table: $thisTABLE</td></tr>";
    print 
"<tr><td colspan=10 class='WhiteHeader' align=center>F I E L D S</td></tr>";
    print 
"<tr>";
    print 
"<td class='BlueHeader'>&nbsp; Name         &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Type         &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Null         &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Key          &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Default      &nbsp;</td>";
    print 
"<td class='BlueHeader' colspan=5>&nbsp; Attributes   &nbsp;</td>";
    print 
"</tr>";

    
$loop 0;
    
#------------------------------------------------
    # Get/Display field information a row at a time
    #------------------------------------------------
    
WHILE ( list ($col_name$col_type$col_null$col_key$col_default$col_extra) = mysql_fetch_row($dbh_rs) ) :

      
# alternate background color for each row
      
$thisBG = ($loop++%"f0f0f0" "e0e0e0");

      
# display field information
      
print "<tr bgcolor=$thisBG style='font-size:11px;'>";
      print 
"<td style='white-space:nowrap; font-weight:bold;'>&nbsp; $col_name   &nbsp;</td>";
      print 
"<td style='white-space:nowrap;'>&nbsp; $col_type   &nbsp;</td>";
      print 
"<td style='white-space:nowrap;'>&nbsp; $col_null   &nbsp;</td>";
      print 
"<td style='white-space:nowrap;'>&nbsp; $col_key    &nbsp;</td>";
      print 
"<td style='white-space:nowrap;'>&nbsp; $col_default&nbsp;</td>";
      print 
"<td colspan=5 style='white-space:nowrap;'>&nbsp; $col_extra  &nbsp;</td>";
      print 
"</tr>";

    ENDWHILE;

  ENDIF;

  
#------------------------------------------------
  # Get list of indices associated with the selected table
  #------------------------------------------------
  
$dbh_rs    mysql_query("show index from $thisDATABASE.$thisTABLE");

  
#------------------------------------------------
  # If the query succeeded, display the results
  #------------------------------------------------
  
IF ($dbh_rs) :

    print 
"<tr><td colspan=10 class='WhiteHeader' align=center>I N D I C E S</td></tr>";
    print 
"<tr>";
    print 
"<td class='BlueHeader'>&nbsp; Name         &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Type         &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Unique?      &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Column       &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Seq          &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Collate      &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Cardinality  &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Packed       &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Null?        &nbsp;</td>";
    print 
"<td class='BlueHeader'>&nbsp; Comment      &nbsp;</td>";
    print 
"</tr>";

    
#------------------------------------------------
    # If no indices available, display appropriate message
    #------------------------------------------------
    
IF (mysql_num_rows($dbh_rs) == 0) :
      print 
"<tr><td colspan=10 align=center><b>No index has been defined for this table.</b></td></tr>";

    
#------------------------------------------------
    # Otherwise, display index/key information
    #------------------------------------------------
    
ELSE :

      
$old_idx_name "";

      WHILE ( list (
$idx_table$idx_unique$idx_name$idx_seq$idx_col$idx_collate$idx_card$idx_sub$idx_packed$idx_null$idx_type$idx_comment) = mysql_fetch_row($dbh_rs) ) :

        
# Prepare field information for "readability"
        
$idx_unique   = ($idx_unique        "False" "True"      );
        
$idx_comment  = ($idx_comment == "" "None"  $idx_comment);
        
$idx_card     = ($idx_card    == "" "0"     $idx_card   );
        
$idx_null     = ($idx_null    == "" "NO"    $idx_null   );

        
# suppress repetition of index name in case of multiple field keys
        
$thisIDXname  = ($idx_name == $old_idx_name "&nbsp;" $idx_name);
        
$old_idx_name $idx_name;

        
# alternate background color for each row
        
$thisBG = ($loop++%"f0f0f0" "e0e0e0");

        
# display index information
        
print "<tr bgcolor=$thisBG>";
        print 
"<td style='font-weight:bold;'>&nbsp; $thisIDXname   &nbsp;</td>";
        print 
"<td>&nbsp; $idx_type    &nbsp;</td>";
        print 
"<td>&nbsp; $idx_unique  &nbsp;</td>";
        print 
"<td>&nbsp; $idx_col     &nbsp;</td>";
        print 
"<td>&nbsp; $idx_seq     &nbsp;</td>";
        print 
"<td>&nbsp; $idx_collate &nbsp;</td>";
        print 
"<td>&nbsp; $idx_card    &nbsp;</td>";
        print 
"<td>&nbsp; $idx_packed  &nbsp;</td>";
        print 
"<td>&nbsp; $idx_null    &nbsp;</td>";
        print 
"<td>&nbsp; $idx_comment &nbsp;</td>";
        print 
"</tr>";

      ENDWHILE;

    ENDIF;

  ENDIF;

  
#------------------------------------------------
  # Display the table creation script for this table
  #------------------------------------------------
  
$dbh_rs    mysql_query("show create table $thisDATABASE.$thisTABLE");

  
#------------------------------------------------
  # If the query succeeded, display the results
  #------------------------------------------------
  
IF ($dbh_rs) :

    
# display header
    
print "<tr bgcolor=gray><td colspan=10 class='WhiteHeader' align=center>CREATE SYNTAX</td></tr>";

    
# track index name
    
$old_idx_name "";

    
# Fetch the code generated by server
    
list ($cre_table$cre_code) = mysql_fetch_row($dbh_rs);
    
    
# "Format" the code and print it
    
$cre_code str_replace(chr(10), "<br>&nbsp;&nbsp;&nbsp;"$cre_code);
    print 
"<tr><td colspan=10>$cre_code</td></tr>";

  ENDIF;

  print 
"</table>";
    
  print 
"</td>";
  
ENDIF;
  
print 
"</tr></table>";

#------------------------------------------------
# Flush the output buffer to the user's browser
#------------------------------------------------
ob_end_flush();

?>

</body>
</html>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.