[ Index ]
 

Code source de phpMyAdmin 2.10.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/ -> db_datadict.php (source)

   1  <?php
   2  /* $Id: db_datadict.php 9602 2006-10-25 12:25:01Z nijel $ */
   3  
   4  
   5  /**
   6   * Gets the variables sent or posted to this script, then displays headers
   7   */
   8  require_once ('./libraries/common.lib.php');
   9  
  10  if (!isset($selected_tbl)) {
  11      require_once ('./libraries/header.inc.php');
  12  }
  13  
  14  
  15  /**
  16   * Gets the relations settings
  17   */
  18  require_once ('./libraries/relation.lib.php');
  19  require_once ('./libraries/transformations.lib.php');
  20  
  21  $cfgRelation  = PMA_getRelationsParam();
  22  
  23  /**
  24   * Check parameters
  25   */
  26  PMA_checkParameters(array('db'));
  27  
  28  /**
  29   * Defines the url to return to in case of error in a sql statement
  30   */
  31  if (isset($table)) {
  32      $err_url = 'tbl_sql.php?' . PMA_generate_common_url($db, $table);
  33  } else {
  34      $err_url = 'db_sql.php?' . PMA_generate_common_url($db);
  35  }
  36  
  37  if ($cfgRelation['commwork']) {
  38      $comment = PMA_getComments($db);
  39  
  40      /**
  41       * Displays DB comment
  42       */
  43      if (is_array($comment)) {
  44          ?>
  45      <p> <?php echo $strDBComment; ?>
  46          <i><?php echo htmlspecialchars( implode( ' ', $comment ) ); ?></i></p>
  47          <?php
  48      } // end if
  49  }
  50  
  51  /**
  52   * Selects the database and gets tables names
  53   */
  54  PMA_DBI_select_db($db);
  55  $rowset = PMA_DBI_query('SHOW TABLES FROM ' . PMA_backquote($db) . ';', null, PMA_DBI_QUERY_STORE);
  56  
  57  $count  = 0;
  58  while ($row = PMA_DBI_fetch_assoc($rowset)) {
  59      $myfieldname = 'Tables_in_' . htmlspecialchars($db);
  60      $table        = $row[$myfieldname];
  61      if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
  62          $comments = PMA_getComments($db, $table);
  63      }
  64  
  65      if ($count != 0) {
  66          echo '<div style="page-break-before: always;">' . "\n";
  67      } else {
  68          echo '<div>' . "\n";
  69      }
  70  
  71      echo '<h2>' . $table . '</h2>' . "\n";
  72  
  73      /**
  74       * Gets table informations
  75       */
  76      // The 'show table' statement works correct since 3.23.03
  77      $showtable    = PMA_DBI_get_tables_full( $db, $table );
  78      $num_rows     = (isset($showtable[$table]['TABLE_ROWS']) ? $showtable[$table]['TABLE_ROWS'] : 0);
  79      $show_comment = (isset($showtable[$table]['TABLE_COMMENT']) ? $showtable[$table]['TABLE_COMMENT'] : '');
  80      unset( $showtable );
  81  
  82  
  83      /**
  84       * Gets table keys and retains them
  85       */
  86  
  87      PMA_DBI_select_db($db);
  88      $result       = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  89      $primary      = '';
  90      $indexes      = array();
  91      $lastIndex    = '';
  92      $indexes_info = array();
  93      $indexes_data = array();
  94      $pk_array     = array(); // will be use to emphasis prim. keys in the table
  95                               // view
  96      while ($row = PMA_DBI_fetch_assoc($result)) {
  97          // Backups the list of primary keys
  98          if ($row['Key_name'] == 'PRIMARY') {
  99              $primary   .= $row['Column_name'] . ', ';
 100              $pk_array[$row['Column_name']] = 1;
 101          }
 102          // Retains keys informations
 103          if ($row['Key_name'] != $lastIndex ){
 104              $indexes[] = $row['Key_name'];
 105              $lastIndex = $row['Key_name'];
 106          }
 107          $indexes_info[$row['Key_name']]['Sequences'][]     = $row['Seq_in_index'];
 108          $indexes_info[$row['Key_name']]['Non_unique']      = $row['Non_unique'];
 109          if (isset($row['Cardinality'])) {
 110              $indexes_info[$row['Key_name']]['Cardinality'] = $row['Cardinality'];
 111          }
 112          // I don't know what does following column mean....
 113          // $indexes_info[$row['Key_name']]['Packed']          = $row['Packed'];
 114  
 115          $indexes_info[$row['Key_name']]['Comment']     = $row['Comment'];
 116  
 117          $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Column_name']  = $row['Column_name'];
 118          if (isset($row['Sub_part'])) {
 119              $indexes_data[$row['Key_name']][$row['Seq_in_index']]['Sub_part'] = $row['Sub_part'];
 120          }
 121  
 122      } // end while
 123      if ($result) {
 124          PMA_DBI_free_result($result);
 125      }
 126  
 127  
 128      /**
 129       * Gets fields properties
 130       */
 131      $result      = PMA_DBI_query('SHOW FIELDS FROM ' . PMA_backquote($table) . ';', null, PMA_DBI_QUERY_STORE);
 132      $fields_cnt  = PMA_DBI_num_rows($result);
 133  
 134  
 135  // We need this to correctly learn if a TIMESTAMP is NOT NULL, since
 136  // SHOW FULL FIELDS or INFORMATION_SCHEMA incorrectly says NULL
 137  // and SHOW CREATE TABLE says NOT NULL (tested
 138  // in MySQL 4.0.25 and 5.0.21, http://bugs.mysql.com/20910).
 139  
 140      $show_create_table = PMA_DBI_fetch_value(
 141          'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table),
 142          0, 1);
 143      $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table));
 144  
 145      // Check if we can use Relations (Mike Beck)
 146      if (!empty($cfgRelation['relation'])) {
 147          // Find which tables are related with the current one and write it in
 148          // an array
 149          $res_rel = PMA_getForeigners($db, $table);
 150  
 151          if (count($res_rel) > 0) {
 152              $have_rel = TRUE;
 153          } else {
 154              $have_rel = FALSE;
 155          }
 156      } else {
 157          $have_rel = FALSE;
 158      } // end if
 159  
 160  
 161      /**
 162       * Displays the comments of the table if MySQL >= 3.23
 163       */
 164      if (!empty($show_comment)) {
 165          echo $strTableComments . ': ' . $show_comment . '<br /><br />';
 166      }
 167  
 168      /**
 169       * Displays the table structure
 170       */
 171      ?>
 172  
 173  <table width="100%" class="print">
 174  <tr><th width="50"><?php echo $strField; ?></th>
 175      <th width="80"><?php echo $strType; ?></th>
 176  <?php /*    <th width="50"><?php echo $strAttr; ?></th>*/ ?>
 177      <th width="40"><?php echo $strNull; ?></th>
 178      <th width="70"><?php echo $strDefault; ?></th>
 179  <?php /*    <th width="50"><?php echo $strExtra; ?></th>*/ ?>
 180      <?php
 181      if ($have_rel) {
 182          echo '    <th>' . $strLinksTo . '</th>' . "\n";
 183      }
 184      if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
 185          echo '    <th>' . $strComments . '</th>' . "\n";
 186      }
 187      if ($cfgRelation['mimework']) {
 188          echo '    <th>MIME</th>' . "\n";
 189      }
 190      ?>
 191  </tr>
 192      <?php
 193      $odd_row = true;
 194      while ($row = PMA_DBI_fetch_assoc($result)) {
 195  
 196          $type             = $row['Type'];
 197          // reformat mysql query output - staybyte - 9. June 2001
 198          // loic1: set or enum types: slashes single quotes inside options
 199          if (preg_match('@^(set|enum)\((.+)\)$@i', $type, $tmp)) {
 200              $tmp[2]       = substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
 201              $type         = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
 202              $type_nowrap  = '';
 203  
 204              $binary       = 0;
 205              $unsigned     = 0;
 206              $zerofill     = 0;
 207          } else {
 208              $binary       = stristr($row['Type'], 'binary');
 209              $unsigned     = stristr($row['Type'], 'unsigned');
 210              $zerofill     = stristr($row['Type'], 'zerofill');
 211              $type_nowrap  = ' nowrap="nowrap"';
 212              $type         = preg_replace('@BINARY@i', '', $type);
 213              $type         = preg_replace('@ZEROFILL@i', '', $type);
 214              $type         = preg_replace('@UNSIGNED@i', '', $type);
 215              if (empty($type)) {
 216                  $type     = ' ';
 217              }
 218          }
 219          $strAttribute     = ' ';
 220          if ($binary) {
 221              $strAttribute = 'BINARY';
 222          }
 223          if ($unsigned) {
 224              $strAttribute = 'UNSIGNED';
 225          }
 226          if ($zerofill) {
 227              $strAttribute = 'UNSIGNED ZEROFILL';
 228          }
 229          if (!isset($row['Default'])) {
 230              if ($row['Null'] != '' && $row['Null'] != 'NO') {
 231                  $row['Default'] = '<i>NULL</i>';
 232              }
 233          } else {
 234              $row['Default'] = htmlspecialchars($row['Default']);
 235          }
 236          $field_name = htmlspecialchars($row['Field']);
 237  
 238          // here, we have a TIMESTAMP that SHOW FULL FIELDS reports as having the
 239          // NULL attribute, but SHOW CREATE TABLE says the contrary. Believe
 240          // the latter.
 241          /**
 242           * @todo merge this logic with the one in tbl_structure.php
 243           * or move it in a function similar to PMA_DBI_get_columns_full()
 244           * but based on SHOW CREATE TABLE because information_schema
 245           * cannot be trusted in this case (MySQL bug)
 246           */
 247          if (!empty($analyzed_sql[0]['create_table_fields'][$field_name]['type']) && $analyzed_sql[0]['create_table_fields'][$field_name]['type'] == 'TIMESTAMP' && $analyzed_sql[0]['create_table_fields'][$field_name]['timestamp_not_null']) {
 248              $row['Null'] = '';
 249          }
 250          ?>
 251  <tr class="<?php echo $odd_row ? 'odd' : 'even'; $odd_row = ! $odd_row; ?>">
 252      <td nowrap="nowrap">
 253          <?php
 254          if (isset($pk_array[$row['Field']])) {
 255              echo '<u>' . $field_name . '</u>';
 256          } else {
 257              echo $field_name;
 258          }
 259          ?>
 260      </td>
 261      <td<?php echo $type_nowrap; ?> xml:lang="en" dir="ltr"><?php echo $type; ?></td>
 262  <?php /*    <td<?php echo $type_nowrap; ?>><?php echo $strAttribute; ?></td>*/ ?>
 263      <td><?php echo (($row['Null'] == '' || $row['Null'] == 'NO') ? $strNo : $strYes); ?></td>
 264      <td nowrap="nowrap"><?php if (isset($row['Default'])) { echo $row['Default']; } ?></td>
 265  <?php /*    <td<?php echo $type_nowrap; ?>><?php echo $row['Extra']; ?></td>*/ ?>
 266          <?php
 267          if ($have_rel) {
 268              echo '    <td>';
 269              if (isset($res_rel[$field_name])) {
 270                  echo htmlspecialchars($res_rel[$field_name]['foreign_table'] . ' -> ' . $res_rel[$field_name]['foreign_field']);
 271              }
 272              echo '</td>' . "\n";
 273          }
 274          if ($cfgRelation['commwork'] || PMA_MYSQL_INT_VERSION >= 40100) {
 275              echo '    <td>';
 276              if (isset($comments[$field_name])) {
 277                  echo htmlspecialchars($comments[$field_name]);
 278              }
 279              echo '</td>' . "\n";
 280          }
 281          if ($cfgRelation['mimework']) {
 282              $mime_map = PMA_getMIME($db, $table, true);
 283  
 284              echo '    <td>';
 285              if (isset($mime_map[$field_name])) {
 286                  echo htmlspecialchars(str_replace('_', '/', $mime_map[$field_name]['mimetype']));
 287              }
 288              echo '</td>' . "\n";
 289          }
 290          ?>
 291  </tr>
 292          <?php
 293      } // end while
 294      PMA_DBI_free_result( $result );
 295      $count++;
 296      ?>
 297  </table>
 298  </div>
 299      <?php
 300  } //ends main while
 301  
 302  /**
 303   * Displays the footer
 304   */
 305  ?>
 306  <script type="text/javascript" language="javascript">
 307  //<![CDATA[
 308  function printPage()
 309  {
 310      document.getElementById('print').style.visibility = 'hidden';
 311      // Do print the page
 312      if (typeof(window.print) != 'undefined') {
 313          window.print();
 314      }
 315      document.getElementById('print').style.visibility = '';
 316  }
 317  //]]>
 318  </script>
 319  <?php
 320  echo '<br /><br /><input type="button" id="print" value="' . $strPrint . '" onclick="printPage()" />';
 321  
 322  require_once ('./libraries/footer.inc.php');
 323  ?>


Généré le : Mon Nov 26 15:18:20 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics