是否可以以json或xml格式获取mySQL数据库的完整结构?
我正在寻找的是一种获取架构(存储的数据并不重要)的方法,以便使用它来为应用程序创建后端/ crud。
答案 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]
但是,有许多不同的利益/产出的替代方案:
mysqldump -u root -p --no-data dbname > schema.sql