📄 database_interface.lib.php
字号:
<?php/* $Id: database_interface.lib.php,v 2.39.2.2 2006/03/08 17:54:29 lem9 Exp $ */// vim: expandtab sw=4 ts=4 sts=4:/** * Common Option Constants For DBI Functions */// PMA_DBI_try_query()define('PMA_DBI_QUERY_STORE', 1); // Force STORE_RESULT method, ignored by classic MySQL.define('PMA_DBI_QUERY_UNBUFFERED', 2); // Do not read whole query// PMA_DBI_get_variable()define('PMA_DBI_GETVAR_SESSION', 1);define('PMA_DBI_GETVAR_GLOBAL', 2);/** * Loads the mysql extensions if it is not loaded yet * * @param string $extension mysql extension to load */function PMA_DBI_checkAndLoadMysqlExtension( $extension = 'mysql' ) { if ( ! function_exists( $extension . '_connect' ) ) { PMA_dl( $extension ); // check whether mysql is available if ( ! function_exists( $extension . '_connect' ) ) { return false; } } return true;}/** * check for requested extension */if ( ! PMA_DBI_checkAndLoadMysqlExtension( $GLOBALS['cfg']['Server']['extension'] ) ) { // if it fails try alternative extension ... // and display an error ... // TODO 2.7.1: add different messages for alternativ extension // and complete fail (no alternativ extension too) $GLOBALS['PMA_errors'][] = sprintf( PMA_sanitize( $GLOBALS['strCantLoad'] ), $GLOBALS['cfg']['Server']['extension'] ) .' - <a href="./Documentation.html#faqmysql" target="documentation">' .$GLOBALS['strDocu'] . '</a>'; if ( $GLOBALS['cfg']['Server']['extension'] === 'mysql' ) { $alternativ_extension = 'mysqli'; } else { $alternativ_extension = 'mysql'; } if ( ! PMA_DBI_checkAndLoadMysqlExtension( $alternativ_extension ) ) { // if alternativ fails too ... header( 'Location: error.php' . '?lang=' . urlencode( $available_languages[$lang][2] ) . '&char=' . urlencode( $charset ) . '&dir=' . urlencode( $text_dir ) . '&type=' . urlencode( $strError ) . '&error=' . urlencode( sprintf( $GLOBALS['strCantLoad'], $GLOBALS['cfg']['Server']['extension'] ) .' - [a@./Documentation.html#faqmysql@documentation]' .$GLOBALS['strDocu'] . '[/a]' ) . '&' . SID ); exit(); } $GLOBALS['cfg']['Server']['extension'] = $alternativ_extension; unset( $alternativ_extension );}/** * Including The DBI Plugin */require_once('./libraries/dbi/' . $GLOBALS['cfg']['Server']['extension'] . '.dbi.lib.php');/** * Common Functions */function PMA_DBI_query($query, $link = null, $options = 0) { $res = PMA_DBI_try_query($query, $link, $options) or PMA_mysqlDie(PMA_DBI_getError($link), $query); return $res;}/** * converts charset of a mysql message, usally coming from mysql_error(), * into PMA charset, usally UTF-8 * uses language to charset mapping from mysql/share/errmsg.txt * and charset names to ISO charset from information_schema.CHARACTER_SETS * * @uses $GLOBALS['cfg']['IconvExtraParams'] * @uses $GLOBALS['charset'] as target charset * @uses PMA_DBI_fetch_value() to get server_language * @uses preg_match() to filter server_language * @uses in_array() * @uses function_exists() to check for a convert function * @uses iconv() to convert message * @uses libiconv() to convert message * @uses recode_string() to convert message * @uses mb_convert_encoding() to convert message * @param string $message * @return string $message */function PMA_DBI_convert_message( $message ) { // latin always last! $encodings = array( 'japanese' => 'EUC-JP', //'ujis', 'japanese-sjis' => 'Shift-JIS', //'sjis', 'korean' => 'EUC-KR', //'euckr', 'russian' => 'KOI8-R', //'koi8r', 'ukrainian' => 'KOI8-U', //'koi8u', 'greek' => 'ISO-8859-7', //'greek', 'serbian' => 'CP1250', //'cp1250', 'estonian' => 'ISO-8859-13', //'latin7', 'slovak' => 'ISO-8859-2', //'latin2', 'czech' => 'ISO-8859-2', //'latin2', 'hungarian' => 'ISO-8859-2', //'latin2', 'polish' => 'ISO-8859-2', //'latin2', 'romanian' => 'ISO-8859-2', //'latin2', 'spanish' => 'CP1252', //'latin1', 'swedish' => 'CP1252', //'latin1', 'italian' => 'CP1252', //'latin1', 'norwegian-ny' => 'CP1252', //'latin1', 'norwegian' => 'CP1252', //'latin1', 'portuguese' => 'CP1252', //'latin1', 'danish' => 'CP1252', //'latin1', 'dutch' => 'CP1252', //'latin1', 'english' => 'CP1252', //'latin1', 'french' => 'CP1252', //'latin1', 'german' => 'CP1252', //'latin1', ); if ( $server_language = PMA_DBI_fetch_value( 'SHOW VARIABLES LIKE \'language\';', 0, 1 ) ) { $found = array(); if ( preg_match( '&(?:\\\|\\/)([^\\\\\/]*)(?:\\\|\\/)$&i', $server_language, $found )) { $server_language = $found[1]; } } if ( ! empty( $server_language ) && isset( $encodings[$server_language] ) ) { if ( function_exists( 'iconv' ) ) { $message = iconv( $encodings[$server_language], $GLOBALS['charset'] . $GLOBALS['cfg']['IconvExtraParams'], $message); } elseif ( function_exists( 'recode_string' ) ) { $message = recode_string( $encodings[$server_language] . '..' . $GLOBALS['charset'], $message ); } elseif ( function_exists( 'libiconv' ) ) { $message = libiconv( $encodings[$server_language], $GLOBALS['charset'], $message ); } elseif ( function_exists( 'mb_convert_encoding' ) ) { // do not try unsupported charsets if ( ! in_array( $server_language, array( 'ukrainian', 'greek', 'serbian' ) ) ) { $message = mb_convert_encoding( $message, $GLOBALS['charset'], $encodings[$server_language] ); } } } else { // lang not found, try all // what TODO ? } return $message;}/** * returns array with database names * * @return array $databases */function PMA_DBI_get_dblist($link = null){ $dbs_array = PMA_DBI_fetch_result('SHOW DATABASES;', $link); // Before MySQL 4.0.2, SHOW DATABASES could send the // whole list, so check if we really have access: if (PMA_MYSQL_INT_VERSION < 40002 || !empty($GLOBALS['cfg']['Server']['hide_db'])) { foreach ($dbs_array as $key => $db) { if (!@PMA_DBI_select_db($db, $link) || (!empty($GLOBALS['cfg']['Server']['hide_db']) && preg_match('/' . $GLOBALS['cfg']['Server']['hide_db'] . '/', $db))) { unset( $dbs_array[$key] ); } } // re-index values $dbs_array = array_values( $dbs_array ); } return $dbs_array;}/** * returns array with table names for given db * * @param string $database name of database * @param mixed $link mysql link resource|object * @return array tables names */function PMA_DBI_get_tables($database, $link = null){ return PMA_DBI_fetch_result('SHOW TABLES FROM ' . PMA_backquote($database) . ';', null, 0, $link, PMA_DBI_QUERY_STORE);}/** * returns array of all tables in given db or dbs * this function expects unqoted names: * RIGHT: my_database * WRONG: `my_database` * WRONG: my\_database * if $tbl_is_group is true, $table is used as filter for table names * if $tbl_is_group is 'comment, $table is used as filter for table comments * * <code> * PMA_DBI_get_tables_full( 'my_database' ); * PMA_DBI_get_tables_full( 'my_database', 'my_table' ) ); * PMA_DBI_get_tables_full( 'my_database', 'my_tables_', true ) ); * PMA_DBI_get_tables_full( 'my_database', 'my_tables_', 'comment' ) ); * </code> * * @uses PMA_MYSQL_INT_VERSION * @uses PMA_DBI_fetch_result() * @uses PMA_escape_mysql_wildcards() * @uses PMA_backquote() * @uses is_array() * @uses addslashes() * @uses strpos() * @uses strtoupper() * @param string $databases database * @param string $table table * @param boolean|string $tbl_is_group $table is a table group * @param resource $link mysql link * @return array list of tbales in given db(s) */function PMA_DBI_get_tables_full($database, $table = false, $tbl_is_group = false, $link = null){ // prepare and check parameters if ( ! is_array($database) ) { $databases = array(addslashes($database)); } else { $databases = array_map('addslashes', $database); } $tables = array(); if ( PMA_MYSQL_INT_VERSION >= 50002 ) { // get table information from information_schema if ( $table ) { if ( true === $tbl_is_group ) { $sql_where_table = 'AND `TABLE_NAME` LIKE \'' . PMA_escape_mysql_wildcards(addslashes($table)) . '%\''; } elseif ( 'comment' === $tbl_is_group ) { $sql_where_table = 'AND `TABLE_COMMENT` LIKE \'' . PMA_escape_mysql_wildcards(addslashes($table)) . '%\''; } else { $sql_where_table = 'AND `TABLE_NAME` = \'' . addslashes($table) . '\''; } } else { $sql_where_table = ''; } // for PMA bc: // `SCHEMA_FIELD_NAME` AS `SHOW_TABLE_STATUS_FIELD_NAME` $sql = ' SELECT *, `TABLE_SCHEMA` AS `Db`, `TABLE_NAME` AS `Name`, `ENGINE` AS `Engine`, `ENGINE` AS `Type`, `VERSION` AS `Version`, `ROW_FORMAT` AS `Row_format`, `TABLE_ROWS` AS `Rows`, `AVG_ROW_LENGTH` AS `Avg_row_length`, `DATA_LENGTH` AS `Data_length`, `MAX_DATA_LENGTH` AS `Max_data_length`, `INDEX_LENGTH` AS `Index_length`, `DATA_FREE` AS `Data_free`, `AUTO_INCREMENT` AS `Auto_increment`, `CREATE_TIME` AS `Create_time`, `UPDATE_TIME` AS `Update_time`, `CHECK_TIME` AS `Check_time`, `TABLE_COLLATION` AS `Collation`, `CHECKSUM` AS `Checksum`, `CREATE_OPTIONS` AS `Create_options`, `TABLE_COMMENT` AS `Comment` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` IN (\'' . implode("', '", $databases) . '\') ' . $sql_where_table; $tables = PMA_DBI_fetch_result($sql, array('TABLE_SCHEMA', 'TABLE_NAME'), null, $link); unset( $sql_where_table, $sql ); } else { 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'];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -