| [ Index ] |
|
Code source de phpMyAdmin 2.10.3 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Mon Nov 26 15:18:20 2007 | par Balluche grâce à PHPXref 0.7 |
|