Я создал эту функцию для получения информации о таблицах и соответствующих столбцах в моей базе данных 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)?>
(Я удалил все 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'].')';
}
Вы можете увидеть разницу ..
Кто-нибудь знает другой метод для этого? получить тип, длину и комментарий.
Заранее спасибо.
Если вы хотите выбрать 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);
Других решений пока нет …