我能否显示 MySQL 数据库中的所有表和数据?

3

我希望能够将一个MySQL数据库中的所有表格和每个表格中的所有记录作为单独的网页输出。我可以使用SELECT函数来输出一个表格的数据,但是希望能够适应不断变化的数据库。随着时间的推移,新的表格会被添加和删除,因此我需要一个通用的函数来显示数据库中所有表格的数据。这是可能的吗?


你可以查询信息模式表来获取所有这些内容。http://dev.mysql.com/doc/refman/5.0/en/information-schema.html - user557846
4个回答

1

这将列出数据库中的所有表,并按表名和序号排序。我省略了一些您可能不需要的列,但请仔细检查列选择。

好的...你得到的比我通常给的要多,但是试试这个,看看它是否符合您的要求。

<?php
$sql = "SELECT `TABLE_SCHEMA`,`TABLE_NAME`, `COLUMN_NAME`, `ORDINAL_POSITION`,
            `COLUMN_DEFAULT`, `IS_NULLABLE`, `DATA_TYPE`, `CHARACTER_MAXIMUM_LENGTH`,
            `CHARACTER_SET_NAME`, `COLLATION_NAME`, `COLUMN_TYPE`, `COLUMN_KEY`
        FROM INFORMATION_SCHEMA.COLUMNS
        ORDER BY `TABLE_SCHEMA`,`TABLE_NAME`,`ORDINAL_POSITION` ASC;";

mysql_connect($host, $username, $password) or die();
mysql_select_db($database) or die();
$result = mysql_query($sql);

$table_top = "<table cellpadding=\"2\" border=\"1\"><tr><th>Schema</th><th>Table</th><th>Column</th><th>Position</th><th>Key</th><th>Type</th><th>Max Length</th></tr>";
$table_change_row = "<tr><th bgcolor=\"black\"></th><th>Table</th><th>Column</th><th>Position</th><th>Key</th><th>Type</th><th>Max Length</th></tr>";
$table_bottom = "</table>";

$current_schema = '';
$current_table = '';

echo $table_top;

while ($row = mysql_fetch_object($result)) {
    if ($current_schema!=$row->TABLE_SCHEMA && !empty($current_schema))
    {
            echo $table_bottom;
            echo $table_top;
    }

    if ($current_table!=$row->TABLE_NAME)
    {
            echo $table_change_row;
    }

    $current_schema = $row->TABLE_SCHEMA;
    $current_table = $row->TABLE_NAME;
    echo "
    <tr>
            <td>$row->TABLE_SCHEMA</td>
            <td>$row->TABLE_NAME</td>
            <td>$row->COLUMN_NAME</td>
            <td>$row->ORDINAL_POSITION</td>
            <td>$row->COLUMN_KEY</td>
            <td>$row->DATA_TYPE</td>
            <td>$row->CHARACTER_MAXIMUM_LENGTH</td>
    </tr>";
}

echo $table_bottom;
?>

谢谢您,我一直在寻找这个 :D 我在想如何创建循环。我了解基础知识,但仍有些困惑。 - user871258
@Thatfuzzbean 我更新了代码,但请查看 http://us.php.net/manual/zh/class.mysql.php,并注意mysql_list_dbs、mysql_list_tables和mysql_list_fields函数以找到更清晰的方法。 - norris-md
真的吗?mysql函数?你知道它们已经被弃用了,对吧? - TRiG

0
使用此查询语句获取所选数据库中的所有表名称。
SELECT * FROM INFORMATION_SCHEMA.COLUMNS

使用foreach循环,再使用第二个循环获取结构细节

DESCRIBE ;

or 
SELECT column_name,column_type,is_nullable,column_key,col  umn_default,extra FROM information_schema.COLUMNS WHERE 
table_name=''

通过使用php的组合,您可以获取所有所需的信息


SELECT * FROM INFORMATION_SCHEMA.TABLES? - Sqoo

0

另一种方法是以更词汇化的方式列出事物。个人而言,我会将所有内容放入数组中并对其进行迭代,但我知道有些人更喜欢直接内联编写。

$dbName = 'foo';

$res = $mysqliCnx->query('show tables');
if ($res)
{
    while ($row = mysqli_fetch_assoc($res))
    {
        $currTable = $row['Tables_in_'.$dbName];
        echo '<h2>'.$currTable.'</h2><ul>';
        $res2 = $mysqliCnx->query('show columns from '.$currTable);
        while ($fields = mysqli_fetch_assoc($res2))
        {
             echo '<li>'.$row['field'].' - ('.$row['Type'].')</li>';
        }
        echo '</ul>';
    }
}

0
function db_show_tables() {
  $o=mysql_query("show tables");
  if($o!==false) {
    while($w=mysql_fetch_row($o)) $lista[]=$w[0];
    return $lista;
  };
  return $o;
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接