获取mysql数据库架构

时间:2017-07-07 00:16:06

标签: php mysql

是否可以以json或xml格式获取mySQL数据库的完整结构?

我正在寻找的是一种获取架构(存储的数据并不重要)的方法,以便使用它来为应用程序创建后端/ crud。

1 个答案:

答案 0 :(得分:1)

这不是对问题的全面答案,因为它不会返回json。但它是一个简单的类,它将关于表的所有相关信息作为对象。这可以很容易地转换为返回一个json。

该类依赖于传递实现rawQuery方法的db对象,如PHP-Mysqli-Database-Class所做的那样。但如果需要,您可以轻松地重写方法extractTableInfo

<?php
Class dbHelper {
    private $db;

    public function __construct($db) {
        $this->db = $db;
    }

    public function extractTableInfo($tableName) {
        $result = $this->db->rawQuery("DESCRIBE `".$tableName."`");

        $tableInfo = array();
        foreach ($result as $key => $value) {
            $info = new \stdClass();
            $info->name = $value['Field'];
            $info->type = $this->_getColumnType($value['Type']);
            $info->length = $this->_getLength($value['Type']);
            $info->hasNull = $this->_getNull($value['Null']);
            $info->default = $this->_getDefault($value['Default']);
            $tableInfo[] = $info;
        }
        return $tableInfo;
    }

    public function getIndexes($tableName) {
        $result = $this->db->rawQuery("SHOW INDEX FROM `".$tableName."`");
        return $result;
    }



    private function _getLength($info) {
        $pattern = '/\({1}([\d\W]*)\){1}/';
        preg_match($pattern, $info, $matches);
        return isset($matches[1]) ? $matches[1] : NULL;
    }

    private function _getColumnType($info) {
        $pattern = '/([\w]*)(\([\d\W]*\))*/';
        preg_match($pattern, $info, $matches);
        return isset($matches[1]) ? $matches[1] : NULL;
    }

    private function _getNull($info) {
        if($info==='NO') {
            return false;
        } else {
            return true;
        }
    }

    private function _getDefault($info) {
        if($info>='') {
            return $info;
        } else {
            return NULL;
        }
    }

}

用法:

$db = YOUR DATABASE OBJECT/CLASS;
$dbHelper = new dbHelper($db);
$tableName = "test";
$tableInfo = $dbHelper->extractTableInfo($tableName);
echo json_encode($tableInfo);

要获取数据库中所有表的列表,您需要:

SHOW TABLES [in dbname]

或关注this question

但是,有许多不同的利益/产出的替代方案:

  • 使用mysql workbench
  • 使用phpmyadmin
  • 使用命令行mysqldump -u root -p --no-data dbname > schema.sql