📄 database_interface.lib.php
字号:
`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() * * @deprecated by PMA_DBI_get_columns() or 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 * @return array column info */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;}/** * array PMA_DBI_get_columns(string $database, string $table, bool $full = false, mysql db link $link = null) * * @param string $database name of database * @param string $table name of table to retrieve columns from * @param boolean $full wether to return full info or only column names * @param mixed $link mysql link resource * @return array column names */function PMA_DBI_get_columns($database, $table, $full = false, $link = null){ $fields = PMA_DBI_fetch_result( 'SHOW ' . ($full ? 'FULL' : '') . ' COLUMNS FROM ' . PMA_backquote($database) . '.' . PMA_backquote($table), 'Fields', ($full ? null : 'Fields'), $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 */function PMA_DBI_postConnect($link, $is_controluser = false){ if (!defined('PMA_MYSQL_INT_VERSION')) { $mysql_version = PMA_DBI_fetch_value( 'SELECT VERSION()', 0, 0, $link, PMA_DBI_QUERY_STORE); if ( $mysql_version ) { $match = explode('.', $mysql_version); define('PMA_MYSQL_INT_VERSION', (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2]))); define('PMA_MYSQL_STR_VERSION', $mysql_version); unset($mysql_version, $match); } else { define('PMA_MYSQL_INT_VERSION', 32332); define('PMA_MYSQL_STR_VERSION', '3.23.32'); } } if (!defined('PMA_ENGINE_KEYWORD')) { if (PMA_MYSQL_INT_VERSION >= 40102) { define('PMA_ENGINE_KEYWORD','ENGINE'); } else { define('PMA_ENGINE_KEYWORD','TYPE'); } } if (PMA_MYSQL_INT_VERSION >= 40100) { // If $lang is defined and we are on MySQL >= 4.1.x, // we auto-switch the lang to its UTF-8 version (if it exists and user // didn't force language) if ( !empty($GLOBALS['lang']) && (substr($GLOBALS['lang'], -5) != 'utf-8') && !isset($GLOBALS['cfg']['Lang']) ) { $lang_utf_8_version = substr($GLOBALS['lang'], 0, strpos($GLOBALS['lang'], '-')) . '-utf-8'; if (!empty($GLOBALS['available_languages'][$lang_utf_8_version])) { $GLOBALS['lang'] = $lang_utf_8_version; $GLOBALS['charset'] = 'utf-8'; define('PMA_LANG_RELOAD', 1); } } // and we remove the non-UTF-8 choices to avoid confusion if (!defined('PMA_REMOVED_NON_UTF_8')) { foreach ( $GLOBALS['available_languages'] as $each_lang => $dummy ) { if ( substr($each_lang, -5) != 'utf-8' ) { unset( $GLOBALS['available_languages'][$each_lang] ); } } define('PMA_REMOVED_NON_UTF_8', 1); } $mysql_charset = $GLOBALS['mysql_charset_map'][$GLOBALS['charset']]; if ( $is_controluser || empty($GLOBALS['collation_connection']) || (strpos($GLOBALS['collation_connection'], '_') ? substr($GLOBALS['collation_connection'], 0, strpos($GLOBALS['collation_connection'], '_')) : $GLOBALS['collation_connection']) == $mysql_charset) { PMA_DBI_query('SET NAMES ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } else { PMA_DBI_query('SET CHARACTER SET ' . $mysql_charset . ';', $link, PMA_DBI_QUERY_STORE); } if (!empty($GLOBALS['collation_connection'])) { PMA_DBI_query('SET collation_connection = \'' . $GLOBALS['collation_connection'] . '\';', $link, PMA_DBI_QUERY_STORE); } if (!$is_controluser) { $GLOBALS['collation_connection'] = PMA_DBI_get_variable('collation_connection', PMA_DBI_GETVAR_SESSION, $link); $GLOBALS['charset_connection'] = PMA_DBI_get_variable('character_set_connection', PMA_DBI_GETVAR_SESSION, $link); } // Add some field types to the list, this needs to be done once per session! if ($GLOBALS['cfg']['ColumnTypes'][count($GLOBALS['cfg']['ColumnTypes']) - 1] != 'VARBINARY') { $GLOBALS['cfg']['ColumnTypes'][] = 'BINARY'; $GLOBALS['cfg']['ColumnTypes'][] = 'VARBINARY'; } } else { require_once('./libraries/charset_conversion.lib.php'); }}/** * returns a single value from the given result or query, * if the query or the result has more than one row or field * the first field of the first row is returned * * <code> * $sql = 'SELECT `name` FROM `user` WHERE `id` = 123'; * $user_name = PMA_DBI_fetch_value( $sql ); * // produces * // $user_name = 'John Doe' * </code> * * @uses is_string() * @uses is_int() * @uses PMA_DBI_try_query() * @uses PMA_DBI_num_rows() * @uses PMA_DBI_fetch_row() * @uses PMA_DBI_fetch_assoc() * @uses PMA_DBI_free_result() * @param string|mysql_result $result query or mysql result * @param integer $row_number row to fetch the value from, * starting at 0, with 0 beeing default * @param integer|string $field field to fetch the value from, * starting at 0, with 0 beeing default * @param resource $link mysql link * @param mixed $options * @return mixed value of first field in first row from result * or false if not found */function PMA_DBI_fetch_value( $result, $row_number = 0, $field = 0, $link = null, $options = 0 ) { $value = false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -