PMA\libraries\DatabaseInterface::getColumnsFull PHP Méthode

getColumnsFull() public méthode

returns detailed array with all columns for given table in database, or all tables/databases
public getColumnsFull ( string $database = null, string $table = null, string $column = null, mixed $link = null ) : array
$database string name of database
$table string name of table to retrieve columns from
$column string name of specific column
$link mixed mysql link resource
Résultat array
    public function getColumnsFull($database = null, $table = null, $column = null, $link = null)
    {
        if (!$GLOBALS['cfg']['Server']['DisableIS']) {
            $sql_wheres = array();
            $array_keys = array();
            // get columns information from information_schema
            if (null !== $database) {
                $sql_wheres[] = '`TABLE_SCHEMA` = \'' . $this->escapeString($database, $link) . '\' ';
            } else {
                $array_keys[] = 'TABLE_SCHEMA';
            }
            if (null !== $table) {
                $sql_wheres[] = '`TABLE_NAME` = \'' . $this->escapeString($table, $link) . '\' ';
            } else {
                $array_keys[] = 'TABLE_NAME';
            }
            if (null !== $column) {
                $sql_wheres[] = '`COLUMN_NAME` = \'' . $this->escapeString($column, $link) . '\' ';
            } 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);
            }
            return $this->fetchResult($sql, $array_keys, null, $link);
        } else {
            $columns = array();
            if (null === $database) {
                foreach ($GLOBALS['dblist']->databases as $database) {
                    $columns[$database] = $this->getColumnsFull($database, null, null, $link);
                }
                return $columns;
            } elseif (null === $table) {
                $tables = $this->getTables($database);
                foreach ($tables as $table) {
                    $columns[$table] = $this->getColumnsFull($database, $table, null, $link);
                }
                return $columns;
            }
            $sql = 'SHOW FULL COLUMNS FROM ' . Util::backquote($database) . '.' . Util::backquote($table);
            if (null !== $column) {
                $sql .= " LIKE '" . $this->escapeString($column, $link) . "'";
            }
            $columns = $this->fetchResult($sql, 'Field', null, $link);
            $ordinal_position = 1;
            foreach ($columns as $column_name => $each_column) {
                // Compatibility with INFORMATION_SCHEMA output
                $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) {
                return reset($columns);
            }
            return $columns;
        }
    }

Usage Example

Exemple #1
0
 /**
  * Function to get the name and type of the columns of a table
  *
  * @return array
  */
 public function getNameAndTypeOfTheColumns()
 {
     $columns = array();
     foreach ($this->_dbi->getColumnsFull($this->_db_name, $this->_name) as $row) {
         if (preg_match('@^(set|enum)\\((.+)\\)$@i', $row['Type'], $tmp)) {
             $tmp[2] = mb_substr(preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1);
             $columns[$row['Field']] = $tmp[1] . '(' . str_replace(',', ', ', $tmp[2]) . ')';
         } else {
             $columns[$row['Field']] = $row['Type'];
         }
     }
     return $columns;
 }