⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database_interface.lib.php

📁 架設ROSE私服必備之物 ROSE數據庫
💻 PHP
📖 第 1 页 / 共 4 页
字号:
    if ( PMA_MYSQL_INT_VERSION < 50002 || empty($tables)) {        foreach ( $databases as $each_database ) {            if ( true === $tbl_is_group ) {                $sql = 'SHOW TABLE STATUS FROM '                    . PMA_backquote($each_database)                    .' LIKE \'' . PMA_escape_mysql_wildcards(addslashes($table)) . '%\'';            } else {                $sql = 'SHOW TABLE STATUS FROM '                    . PMA_backquote($each_database) . ';';            }            $each_tables = PMA_DBI_fetch_result($sql, 'Name', null, $link);            foreach ( $each_tables as $table_name => $each_table ) {                if ( 'comment' === $tbl_is_group                  && 0 === strpos($each_table['Comment'], $table) )                {                    // remove table from list                    unset( $each_tables[$table_name] );                    continue;                }                if ( ! isset( $each_tables[$table_name]['Type'] )                  && isset( $each_tables[$table_name]['Engine'] ) ) {                    // pma BC, same parts of PMA still uses 'Type'                    $each_tables[$table_name]['Type']                        =& $each_tables[$table_name]['Engine'];                } elseif ( ! isset( $each_tables[$table_name]['Engine'] )                  && isset( $each_tables[$table_name]['Type'] ) ) {                    // old MySQL reports Type, newer MySQL reports Engine                    $each_tables[$table_name]['Engine']                        =& $each_tables[$table_name]['Type'];                }                // MySQL forward compatibility                // so pma could use this array as if every server is of version >5.0                $each_tables[$table_name]['TABLE_SCHEMA']      = $each_database;                $each_tables[$table_name]['TABLE_NAME']        =& $each_tables[$table_name]['Name'];                $each_tables[$table_name]['ENGINE']            =& $each_tables[$table_name]['Engine'];                $each_tables[$table_name]['VERSION']           =& $each_tables[$table_name]['Version'];                $each_tables[$table_name]['ROW_FORMAT']        =& $each_tables[$table_name]['Row_format'];                $each_tables[$table_name]['TABLE_ROWS']        =& $each_tables[$table_name]['Rows'];                $each_tables[$table_name]['AVG_ROW_LENGTH']    =& $each_tables[$table_name]['Avg_row_length'];                $each_tables[$table_name]['DATA_LENGTH']       =& $each_tables[$table_name]['Data_length'];                $each_tables[$table_name]['MAX_DATA_LENGTH']   =& $each_tables[$table_name]['Max_data_length'];                $each_tables[$table_name]['INDEX_LENGTH']      =& $each_tables[$table_name]['Index_length'];                $each_tables[$table_name]['DATA_FREE']         =& $each_tables[$table_name]['Data_free'];                $each_tables[$table_name]['AUTO_INCREMENT']    =& $each_tables[$table_name]['Auto_increment'];                $each_tables[$table_name]['CREATE_TIME']       =& $each_tables[$table_name]['Create_time'];                $each_tables[$table_name]['UPDATE_TIME']       =& $each_tables[$table_name]['Update_time'];                $each_tables[$table_name]['CHECK_TIME']        =& $each_tables[$table_name]['Check_time'];                $each_tables[$table_name]['TABLE_COLLATION']   =& $each_tables[$table_name]['Collation'];                $each_tables[$table_name]['CHECKSUM']          =& $each_tables[$table_name]['Checksum'];                $each_tables[$table_name]['CREATE_OPTIONS']    =& $each_tables[$table_name]['Create_options'];                $each_tables[$table_name]['TABLE_COMMENT']     =& $each_tables[$table_name]['Comment'];                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 count of databases for current server * * @param   string      $database   databases to count * @param   resource    $link       mysql db link */function PMA_DBI_get_databases_count($database = null, $link = null){    return count(PMA_DBI_get_dblist($link));}/** * 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 * @param   string          $sort_by        collumn to order by * @param   string          $sort_order     ASC or DESC * @param   integer         $limit_offset   starting offset for LIMIT * @param   bool|int        $limit_count    row count for LIMIT or true for $GLOBALS['cfg']['MaxDbList'] * @return  array       $databases */function PMA_DBI_get_databases_full($database = null, $force_stats = false,    $link = null, $sort_by = 'SCHEMA_NAME', $sort_order = 'ASC',    $limit_offset = 0, $limit_count = false){    $sort_order = strtoupper($sort_order);    if (true === $limit_count) {        $limit_count = $GLOBALS['cfg']['MaxDbList'];    }    // initialize to avoid errors when there are no databases    $databases = array();    $apply_limit_and_order_manual = true;    if (PMA_MYSQL_INT_VERSION >= 50002) {        /**         * if $GLOBALS['cfg']['NaturalOrder'] is enabled, we cannot use LIMIT         * cause MySQL does not support natural ordering, we have to do it afterward         */        if ($GLOBALS['cfg']['NaturalOrder']) {            $limit = '';        } else {            if ($limit_count) {                $limit = ' LIMIT ' . $limit_count . ' OFFSET ' . $limit_offset;            }            $apply_limit_and_order_manual = false;        }        // 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`.*';        if ($force_stats) {            $sql .= ',                    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`';        }        $sql .= '               FROM `information_schema`.`SCHEMATA`';        if ($force_stats) {            $sql .= '          LEFT JOIN `information_schema`.`TABLES`                 ON `information_schema`.`TABLES`.`TABLE_SCHEMA`                  = `information_schema`.`SCHEMATA`.`SCHEMA_NAME`';        }        $sql .= '              ' . $sql_where_schema . '           GROUP BY `information_schema`.`SCHEMATA`.`SCHEMA_NAME`           ORDER BY ' . PMA_backquote($sort_by) . ' ' . $sort_order           . $limit;        $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 );            }        }    }    /**     * apply limit and order manually now     * (caused by older MySQL < 5 or $GLOBALS['cfg']['NaturalOrder'])     */    if ($apply_limit_and_order_manual) {        /**         * first apply ordering         */        if ($GLOBALS['cfg']['NaturalOrder']) {            $sorter = 'strnatcasecmp';        } else {            $sorter = 'strcasecmp';        }        // produces f.e.:        // return -1 * strnatcasecmp($a["SCHEMA_TABLES"], $b["SCHEMA_TABLES"])        $sort_function = '            return ' . ($sort_order == 'ASC' ? 1 : -1) . ' * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);        ';        usort($databases, create_function('$a, $b', $sort_function));        /**         * now apply limit         */        if ($limit_count) {            $databases = array_slice($databases, $limit_offset, $limit_count);        }    }    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`,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -