如何在MySQL中显示所有数据库并对每个数据库显示所有表

4
我可以展示所有数据库和特定数据库中的所有表,但我想在PHP中使用循环或foreach获取MySQL中的所有数据库,并对于每个数据库显示与数据库名称关联的所有表。 我想要这样的数组... Array ( [database_name] = employees, [tables] = name, surame) 这只是一个例子
我尝试过:
$db = new MysqliDb('');
$All_databases = $db->rawQuery('SHOW DATABASES'); // this gets all databases
foreach ($All_databases as $key => $value) {
    $AllDbs[] = $value['Database']; // array of all databases found

    $dbname = $value['Database'];  // assign $dbname as a database name

    foreach ($AllDbs as $tbl) {    // foreach database found find its tables

        $db2 = new MysqliDb($dbname);
        $db_tables = $db2->rawQuery('SHOW TABLES');

        foreach ($db_tables as $tbl) {
            $table_name = $tbl['Tables_in_'.$dbname.''];
        }
    }
}

foreach ($All_databases as $key => $value) 中,$All_databasesas 之间缺少一个空格。 - Allan Pereira
编辑过了,谢谢。但是还是没有得到我想要的结果。 - ernys
1个回答

2

使用 information_schema 表格查询相关信息会更加简单,具体来说,SCHEMATA 和 TABLES 表格会对您有所帮助。

如果要在一次查询中获取您想要的信息,请在 SCHEMATA 上左连接 TABLES 并使用 group_concat() 函数生成由逗号分隔的表格列表:

select s.SCHEMA_NAME, group_concat(t.TABLE_NAME)
from information_schema.SCHEMATA s
left join information_schema.TABLES t on s.SCHEMA_NAME=t.TABLE_SCHEMA
group by s.SCHEMA_NAME

我收到了以下错误信息... 'Employees.SCHEMATA' 不存在...其中,employees是我的第一个找到的数据库。 - ernys
抱歉,您需要将information_schema作为数据库添加到表名中。请查看更新的答案。 - Shadow

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