使用 PHP 将 MySQL 查询结果转换为 JSON 格式数组

使用 PHP 将 MySQL 查询结果转换为 JSON 格式数组
最新回答
盖世傻白甜

2022-04-28 06:19:12

要将 MySQL 查询结果通过 PHP 转换为 JSON 格式数组,需按照以下步骤实现:

核心步骤
  1. 执行 MySQL 查询并获取结果使用 mysqli 或 PDO 扩展执行查询,将结果存储在变量中(如 $data)。每个结果行应包含 type、count 和 amount 属性。

  2. 构建目标 JSON 结构创建父数组,将查询结果数组赋值给 types 键,形成嵌套结构:

    { "types": [ {"type": "A", "count": 1, "amount": 100}, {"type": "B", "count": 2, "amount": 200} ]}
  3. 转换为 JSON 字符串使用 json_encode() 函数将 PHP 数组转换为 JSON 格式,可选参数 JSON_PRETTY_PRINT 优化可读性。

完整代码实现<?php// 1. 连接数据库(示例使用 mysqli)$conn = new mysqli("localhost", "username", "password", "database");if ($conn->connect_error) { die("连接失败: " . $conn->connect_error);}// 2. 执行查询并获取结果$query = "SELECT type, count, amount FROM your_table";$result = $conn->query($query);$data = [];if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { // 将每行数据转为对象并添加到数组 $data[] = (object)$row; }}// 3. 构建 JSON 结构$parent = ['types' => $data];// 4. 转换为 JSON 字符串$json_data = json_encode($parent, JSON_PRETTY_PRINT);// 5. 输出结果header('Content-Type: application/json');echo $json_data;// 关闭连接$conn->close();?>关键点说明
  • 数据库连接替换 localhost、username、password 和 database 为实际值。推荐使用 PDO 以提高安全性。

  • 查询结果处理

    fetch_assoc() 获取关联数组,通过 (object) 强制转换为对象。

    若结果为空,$data 将是空数组,最终 JSON 中 types 键对应空列表。

  • JSON 格式化

    JSON_PRETTY_PRINT 生成带缩进的 JSON(调试用),生产环境可省略以减少数据量。

    确保 PHP 启用 JSON 扩展(默认已启用)。

  • 特殊字符处理若数据包含非 ASCII 字符(如中文),需在 json_encode() 前设置编码:

    mb_internal_encoding("UTF-8");$json_data = json_encode($parent, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
替代方案(PDO 示例)<?phptry { $pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password"); $stmt = $pdo->query("SELECT type, count, amount FROM your_table"); $data = $stmt->fetchAll(PDO::FETCH_OBJ); // 直接获取对象数组 $parent = ['types' => $data]; header('Content-Type: application/json'); echo json_encode($parent);} catch (PDOException $e) { die("数据库错误: " . $e->getMessage());}?>注意事项
  1. 错误处理添加数据库连接和查询的异常处理,避免暴露敏感信息。

  2. 性能优化大数据量时,分页查询或流式输出(如 json_encode 分块处理)可减少内存占用。

  3. 安全性使用预处理语句(PDO)防止 SQL 注入,而非直接拼接 SQL。

通过以上方法,可高效将 MySQL 查询结果转换为结构化 JSON,适用于 API 开发或前端数据交互场景。