Как я могу получить тип, длину и комментарий о столбцах в базе данных MySQL с помощью PDO?


Я создал эту функцию для получения информации о таблицах и соответствующих им столбцах в моей базе данных MySQL:

class SQL extends DB
{
    public static function showTables($alias='', $table_name='')
    {
        if(empty($alias) || $alias===true){  //  empty = show all tables from all available connections, true = show columns aswell
            foreach(self::get() as $con){  //  get() keeps, among other things, the aliases of all available connections
                $html .= '"'.$con['alias'].'": '.$con['db'];  //  the alias for the connection, and databasename, for the following table(s)
                $tables = self::con($con['alias'])->query('SHOW TABLES')->fetchAll(PDO::FETCH_COLUMN);  //  fetch an array of all tables available through this connection
                foreach($tables as $table){
                    $html .= $table;  //  table name
                    if($alias===true){  //  show columns aswell when this is set to true
                        $columns = self::con($con['alias'])->query('SHOW COLUMNS FROM '.$table)->fetchAll(PDO::FETCH_COLUMN);  //  fetch an array of all column in this table
                        foreach($columns as $column){
                            $html .= $column;  //  column name
                        }
                    }
                }
            }
        } else {
            /*  basically the same code, but limits the result to a defined connection. And table if that is defined  */
        }
    }
}

Важно знать, что эта функция адаптирована к тому, как я устанавливаю и использую подключения PDO. В основном каждое соединение имеет псевдоним, и доступ к соединению осуществляется через указанный псевдоним. Но это не имеет никакого отношения к моей проблеме.

Вот как я использую функцию и что она производит:

<?=sql::showTables(true)?>

enter image description here
( Я уже удалены все css-стили из кода выше)

Это нормально. Но я также хотел бы получить, по крайней мере, тип, длину и комментарий (если таковые имеются).

Я просто попытался, когда писал этот вопрос, поместить getColumnMeta() внутри столбца foreach-цикл, но это сработало не совсем так, как ожидалось:

    $columns = self::con($con['alias'])->query('SHOW COLUMNS FROM '.$table)->getColumnMeta(0);
    foreach($columns as $column){
        $meta = self::con($con['alias'])->query('SELECT `'.$column.'` FROM '.$table)->getColumnMeta(0);
        $html .= $meta['name'].' '.$meta['native_type'].'('.$meta['len'].')';
    }

enter image description hereenter image description here

Вы можете увидеть разницу..
Кто-нибудь знает другой способ для этого? получение типа, длины и комментария.

Спасибо в продвижение.

Author: ThomasK, 2014-10-02

1 answers

Если вы хотите выбрать информацию о столбце comment в этой конкретной таблице, вы можете использовать:

SHOW FULL COLUMNS FROM table_test // with FULL option

Простой пример:

$db = new PDO('mysql:host=localhost;dbname=DB_NAME;charset=utf8', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $db->query('SHOW FULL COLUMNS FROM table_test');
                      //  ^
$results = $query->fetchAll(PDO::FETCH_ASSOC);
echo '<pre>';
print_r($results);
 5
Author: Ghost, 2014-10-02 03:10:59