如何在PHP中获取SQL数据库表名、字段及数据并生成JSON编码
PHP获取SQL表信息并转为JSON的解决方案
嗨,我来帮你搞定这两个需求!不过先敲个重点:你提供的mysql_*系列函数早就被PHP废弃了(PHP 5.5起标记为废弃,PHP 7直接移除),所以下面我用mysqli扩展来写示例——这是目前官方推荐的安全用法哦。
一、获取所有表名及对应表内数据,转为JSON编码
我们可以先获取数据库里的所有表名,再逐个查询每个表的全部数据,最后把表名和对应数据整理成数组,再转成JSON。
示例代码:
// 数据库连接参数 $host = 'localhost'; $username = '你的用户名'; $password = '你的密码'; $dbname = '你的数据库名'; // 创建mysqli连接 $conn = new mysqli($host, $username, $password, $dbname); // 检查连接是否成功 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 存储最终结果的数组 $resultData = []; // 获取所有表名 $tablesResult = $conn->query("SHOW TABLES"); if ($tablesResult) { // 遍历每个表 while ($row = $tablesResult->fetch_row()) { $tableName = $row[0]; // 查询当前表的所有数据 $tableDataResult = $conn->query("SELECT * FROM `$tableName`"); if ($tableDataResult) { // 将表数据转为关联数组 $tableData = []; while ($dataRow = $tableDataResult->fetch_assoc()) { $tableData[] = $dataRow; } // 把表名和对应数据存入结果数组 $resultData[$tableName] = $tableData; // 释放结果集 $tableDataResult->free(); } } $tablesResult->free(); } // 关闭连接 $conn->close(); // 转为JSON(JSON_PRETTY_PRINT让输出更易读,可选) $jsonOutput = json_encode($resultData, JSON_PRETTY_PRINT); echo $jsonOutput;
二、列出所有表名及每张表的字段信息,转为JSON编码
这个需求需要先获取表名,再对每个表查询字段详情(比如字段名、类型、是否为主键等),最后整理成JSON。
示例代码:
// 数据库连接参数(同上) $host = 'localhost'; $username = '你的用户名'; $password = '你的密码'; $dbname = '你的数据库名'; $conn = new mysqli($host, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } $tableSchema = []; // 获取所有表名 $tablesResult = $conn->query("SHOW TABLES"); if ($tablesResult) { while ($row = $tablesResult->fetch_row()) { $tableName = $row[0]; // 查询当前表的字段信息(用DESCRIBE或SHOW COLUMNS FROM都可以) $columnsResult = $conn->query("DESCRIBE `$tableName`"); if ($columnsResult) { $columns = []; while ($colRow = $columnsResult->fetch_assoc()) { $columns[] = [ '字段名' => $colRow['Field'], '类型' => $colRow['Type'], '是否允许为空' => $colRow['Null'], '主键' => $colRow['Key'], '默认值' => $colRow['Default'], '额外属性' => $colRow['Extra'] ]; } $tableSchema[$tableName] = $columns; $columnsResult->free(); } } $tablesResult->free(); } $conn->close(); // 转为JSON $jsonSchema = json_encode($tableSchema, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); echo $jsonSchema;
补充说明
- 如果你的项目用的是PDO扩展,写法会略有不同,但核心逻辑是一样的:先获取表名,再遍历处理每个表的内容/字段。
json_encode的参数可以根据需求调整,比如JSON_UNESCAPED_UNICODE能避免中文被转义,JSON_PRETTY_PRINT适合调试时输出格式化的JSON。
内容的提问来源于stack exchange,提问作者Fixo Victor
相关产品推荐
相关产品推荐

