📄 database_interface.lib.php
字号:
if ( strtoupper( $each_tables[$table_name]['Comment'] ) === 'VIEW' ) { $each_tables[$table_name]['TABLE_TYPE'] = 'VIEW'; } else { // TODO difference between 'TEMPORARY' and 'BASE TABLE' // but how to detect? $each_tables[$table_name]['TABLE_TYPE'] = 'BASE TABLE'; } } $tables[$each_database] = $each_tables; } } if ( $GLOBALS['cfg']['NaturalOrder'] ) { foreach ( $tables as $key => $val ) { uksort($tables[$key], 'strnatcasecmp'); } } if (! is_array($database)) { if (isset($tables[$database])) { return $tables[$database]; } elseif (isset($tables[strtolower($database)])) { // on windows with lower_case_table_names = 1 // MySQL returns // with SHOW DATABASES or information_schema.SCHEMATA: `Test` // but information_schema.TABLES gives `test` // bug #1436171 // sf.net/tracker/?func=detail&aid=1436171&group_id=23067&atid=377408 return $tables[strtolower($database)]; } else { return $tables; } } else { return $tables; }}/** * returns array with databases containing extended infos about them * * @param string $databases database * @param boolean $force_stats retrieve stats also for MySQL < 5 * @param resource $link mysql link * @return array $databases */function PMA_DBI_get_databases_full( $database = null, $force_stats = false, $link = null ) { // initialize to avoid errors when there are no databases $databases = array(); if ( PMA_MYSQL_INT_VERSION >= 50002 ) { // get table information from information_schema if ( $database ) { $sql_where_schema = 'WHERE `SCHEMA_NAME` LIKE \'' . addslashes( $database ) . '\''; } else { $sql_where_schema = ''; } // for PMA bc: // `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME` $sql = ' SELECT `information_schema`.`SCHEMATA`.*, COUNT(`information_schema`.`TABLES`.`TABLE_SCHEMA`) AS `SCHEMA_TABLES`, SUM(`information_schema`.`TABLES`.`TABLE_ROWS`) AS `SCHEMA_TABLE_ROWS`, SUM(`information_schema`.`TABLES`.`DATA_LENGTH`) AS `SCHEMA_DATA_LENGTH`, SUM(`information_schema`.`TABLES`.`MAX_DATA_LENGTH`) AS `SCHEMA_MAX_DATA_LENGTH`, SUM(`information_schema`.`TABLES`.`INDEX_LENGTH`) AS `SCHEMA_INDEX_LENGTH`, SUM(`information_schema`.`TABLES`.`DATA_LENGTH` + `information_schema`.`TABLES`.`INDEX_LENGTH`) AS `SCHEMA_LENGTH`, SUM(`information_schema`.`TABLES`.`DATA_FREE`) AS `SCHEMA_DATA_FREE` FROM `information_schema`.`SCHEMATA` LEFT JOIN `information_schema`.`TABLES` ON `information_schema`.`TABLES`.`TABLE_SCHEMA` = `information_schema`.`SCHEMATA`.`SCHEMA_NAME` ' . $sql_where_schema . ' GROUP BY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`'; $databases = PMA_DBI_fetch_result( $sql, 'SCHEMA_NAME', null, $link ); unset( $sql_where_schema, $sql ); } else { foreach ( PMA_DBI_get_dblist( $link ) as $database_name ) { // MySQL forward compatibility // so pma could use this array as if every server is of version >5.0 $databases[$database_name]['SCHEMA_NAME'] = $database_name; if ( $force_stats ) { require_once 'mysql_charsets.lib.php'; $databases[$database_name]['DEFAULT_COLLATION_NAME'] = PMA_getDbCollation( $database_name ); // get additonal info about tables $databases[$database_name]['SCHEMA_TABLES'] = 0; $databases[$database_name]['SCHEMA_TABLE_ROWS'] = 0; $databases[$database_name]['SCHEMA_DATA_LENGTH'] = 0; $databases[$database_name]['SCHEMA_MAX_DATA_LENGTH'] = 0; $databases[$database_name]['SCHEMA_INDEX_LENGTH'] = 0; $databases[$database_name]['SCHEMA_LENGTH'] = 0; $databases[$database_name]['SCHEMA_DATA_FREE'] = 0; $res = PMA_DBI_query('SHOW TABLE STATUS FROM ' . PMA_backquote( $database_name ) . ';'); while ( $row = PMA_DBI_fetch_assoc( $res ) ) { $databases[$database_name]['SCHEMA_TABLES']++; $databases[$database_name]['SCHEMA_TABLE_ROWS'] += $row['Rows']; $databases[$database_name]['SCHEMA_DATA_LENGTH'] += $row['Data_length']; $databases[$database_name]['SCHEMA_MAX_DATA_LENGTH'] += $row['Max_data_length']; $databases[$database_name]['SCHEMA_INDEX_LENGTH'] += $row['Index_length']; $databases[$database_name]['SCHEMA_DATA_FREE'] += $row['Data_free']; $databases[$database_name]['SCHEMA_LENGTH'] += $row['Data_length'] + $row['Index_length']; } PMA_DBI_free_result( $res ); unset( $res ); } } } if ( $GLOBALS['cfg']['NaturalOrder'] ) { uksort( $databases, 'strnatcasecmp' ); } return $databases;}/** * returns detailed array with all columns for given table in database, * or all tables/databases * * @param string $database name of database * @param string $table name of table to retrieve columns from * @param string $column name of specific column * @param mixed $link mysql link resource */function PMA_DBI_get_columns_full($database = null, $table = null, $column = null, $link = null){ $columns = array(); if ( PMA_MYSQL_INT_VERSION >= 50002 ) { $sql_wheres = array(); $array_keys = array(); // get columns information from information_schema if ( null !== $database ) { $sql_wheres[] = '`TABLE_SCHEMA` = \'' . addslashes($database) . '\' '; } else { $array_keys[] = 'TABLE_SCHEMA'; } if ( null !== $table ) { $sql_wheres[] = '`TABLE_NAME` = \'' . addslashes($table) . '\' '; } else { $array_keys[] = 'TABLE_NAME'; } if ( null !== $column ) { $sql_wheres[] = '`COLUMN_NAME` = \'' . addslashes($column) . '\' '; } else { $array_keys[] = 'COLUMN_NAME'; } // for PMA bc: // `[SCHEMA_FIELD_NAME]` AS `[SHOW_FULL_COLUMNS_FIELD_NAME]` $sql = ' SELECT *, `COLUMN_NAME` AS `Field`, `COLUMN_TYPE` AS `Type`, `COLLATION_NAME` AS `Collation`, `IS_NULLABLE` AS `Null`, `COLUMN_KEY` AS `Key`, `COLUMN_DEFAULT` AS `Default`, `EXTRA` AS `Extra`, `PRIVILEGES` AS `Privileges`, `COLUMN_COMMENT` AS `Comment` FROM `information_schema`.`COLUMNS`'; if ( count($sql_wheres) ) { $sql .= "\n" . ' WHERE ' . implode(' AND ', $sql_wheres); } $columns = PMA_DBI_fetch_result($sql, $array_keys, null, $link); unset( $sql_wheres, $sql ); } else { if ( null === $database ) { $databases = PMA_DBI_get_dblist(); foreach ( $databases as $database ) { $columns[$database] = PMA_DBI_get_columns_full($database, null, null, $link); } return $columns; } elseif ( null === $table ) { $tables = PMA_DBI_get_tables($database); foreach ( $tables as $table ) { $columns[$table] = PMA_DBI_get_columns_full( $database, $table, null, $link); } return $columns; } $sql = 'SHOW FULL COLUMNS FROM ' . PMA_backquote($database) . '.' . PMA_backquote($table); if ( null !== $column ) { $sql .= " LIKE '" . $column . "'"; } $columns = PMA_DBI_fetch_result( $sql, 'Field', null, $link ); $ordinal_position = 1; foreach ( $columns as $column_name => $each_column ) { // MySQL forward compatibility // so pma could use this array as if every server is of version >5.0 $columns[$column_name]['COLUMN_NAME'] =& $columns[$column_name]['Field']; $columns[$column_name]['COLUMN_TYPE'] =& $columns[$column_name]['Type']; $columns[$column_name]['COLLATION_NAME'] =& $columns[$column_name]['Collation']; $columns[$column_name]['IS_NULLABLE'] =& $columns[$column_name]['Null']; $columns[$column_name]['COLUMN_KEY'] =& $columns[$column_name]['Key']; $columns[$column_name]['COLUMN_DEFAULT'] =& $columns[$column_name]['Default']; $columns[$column_name]['EXTRA'] =& $columns[$column_name]['Extra']; $columns[$column_name]['PRIVILEGES'] =& $columns[$column_name]['Privileges']; $columns[$column_name]['COLUMN_COMMENT'] =& $columns[$column_name]['Comment']; $columns[$column_name]['TABLE_CATALOG'] = null; $columns[$column_name]['TABLE_SCHEMA'] = $database; $columns[$column_name]['TABLE_NAME'] = $table; $columns[$column_name]['ORDINAL_POSITION'] = $ordinal_position; $columns[$column_name]['DATA_TYPE'] = substr($columns[$column_name]['COLUMN_TYPE'], 0, strpos($columns[$column_name]['COLUMN_TYPE'], '(')); // @TODO guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE $columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null; // @TODO guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH $columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null; $columns[$column_name]['NUMERIC_PRECISION'] = null; $columns[$column_name]['NUMERIC_SCALE'] = null; $columns[$column_name]['CHARACTER_SET_NAME'] = substr($columns[$column_name]['COLLATION_NAME'], 0, strpos($columns[$column_name]['COLLATION_NAME'], '_')); $ordinal_position++; } if ( null !== $column ) { reset($columns); $columns = current($columns); } } return $columns;}/** * @TODO should only return columns names, for more info use PMA_DBI_get_columns_full() * * @param string $database name of database * @param string $table name of table to retrieve columns from * @param mixed $link mysql link resource */function PMA_DBI_get_fields($database, $table, $link = null){ // here we use a try_query because when coming from // tbl_create + tbl_properties.inc.php, the table does not exist $fields = PMA_DBI_fetch_result( 'SHOW FULL COLUMNS FROM ' . PMA_backquote($database) . '.' . PMA_backquote($table), null, null, $link); if ( ! is_array($fields) || count($fields) < 1 ) { return false; } return $fields;}/** * returns value of given mysql server variable * * @param string $var mysql server variable name * @param int $type PMA_DBI_GETVAR_SESSION|PMA_DBI_GETVAR_GLOBAL * @param mixed $link mysql link resource|object * @return mixed value for mysql server variable */function PMA_DBI_get_variable($var, $type = PMA_DBI_GETVAR_SESSION, $link = null){ if ($link === null) { if (isset($GLOBALS['userlink'])) { $link = $GLOBALS['userlink']; } else { return false; } } if (PMA_MYSQL_INT_VERSION < 40002) { $type = 0; } switch ($type) { case PMA_DBI_GETVAR_SESSION: $modifier = ' SESSION'; break; case PMA_DBI_GETVAR_GLOBAL: $modifier = ' GLOBAL'; break; default: $modifier = ''; } return PMA_DBI_fetch_value( 'SHOW' . $modifier . ' VARIABLES LIKE \'' . $var . '\';', 0, 1, $link);}/** * @uses ./libraries/charset_conversion.lib.php * @uses PMA_DBI_QUERY_STORE * @uses PMA_REMOVED_NON_UTF_8 * @uses PMA_MYSQL_INT_VERSION * @uses PMA_MYSQL_STR_VERSION * @uses PMA_DBI_GETVAR_SESSION * @uses PMA_DBI_fetch_value() * @uses PMA_DBI_query() * @uses PMA_DBI_get_variable() * @uses $GLOBALS['collation_connection'] * @uses $GLOBALS['charset_connection'] * @uses $GLOBALS['available_languages'] * @uses $GLOBALS['mysql_charset_map'] * @uses $GLOBALS['charset'] * @uses $GLOBALS['lang'] * @uses $GLOBALS['cfg']['Lang'] * @uses $GLOBALS['cfg']['ColumnTypes'] * @uses defined() * @uses explode() * @uses sprintf() * @uses intval() * @uses define() * @uses defined() * @uses substr() * @uses count() * @param mixed $link mysql link resource|object * @param boolean $is_controluser */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -