PHP将MySQL查询结果转换为JSON的两种方法对比

周末不加班
周末不加班
发布时间:2026-10-16| 6人浏览过
原创

在PHP Web开发中,将MySQL数据库查询结果转换为JSON格式是构建API接口的常见需求。本文将通过具体的代码实例,详细解析使用mysqli扩展获取数据并调用json_encode的过程,重点对比数组结构与对象结构在JSON序列化后的不同表现,帮助开发者掌握高效、规范的数据输出技巧。

基础环境准备与安全提示

在编写任何数据库交互代码之前,必须确保服务器已安装并启用mysqli扩展。出于安全考虑,强烈建议不要在代码中硬编码数据库密码。在实际生产环境中,请优先使用环境变量或配置文件(如.env)来管理敏感凭据,并确保数据库用户仅拥有必要的最小权限。

方法一:直接使用关联数组进行JSON编码

这是最直观的处理方式。通过mysqli_query执行SQL查询,并使用mysqli_fetch_array配合MYSQL_ASSOC参数逐行获取数据,将其存入一个二维数组中,最后直接调用json_encode进行转换。

第1步:建立数据库连接

首先需要创建mysqli连接实例。以下代码展示了基础的连接流程,包含字符集设置和连接错误处理。

<?php
header("Content-type:text/html;charset=utf-8");
$servername = "localhost";
$username = "root";
$password = "your_password"; // 建议使用变量而非明文
$dbname = "tjks";

// 创建连接
$con = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error);
}
?>

第2步:执行查询并收集数据

定义SQL语句并执行,若查询失败则抛出异常。成功时,遍历结果集并将每一行作为子数组添加到主数组$jarr中。

<?php
$sql = "SELECT * FROM brands";
$result = $con->query($sql);

$jarr = array();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $jarr[] = $row;
    }
} else {
    echo "0 results";
}
?>

第3步:生成JSON字符串

使用json_encode函数将整理好的二维数组转换为JSON字符串。此时生成的JSON是一个标准的数组结构。

<?php
$jsonString = json_encode($jarr, JSON_UNESCAPED_UNICODE); 
// JSON_UNESCAPED_UNICODE 确保中文不被转为Unicode编码
echo $jsonString;
?>

输出示例:

[{"id":"1","name":"GNC"},{"id":"2","name":"TCBJ"}]{}

方法二:利用stdClass对象调整数据结构

在某些特定场景下,可能需要将数据呈现为对象属性而非纯数组索引。PHP内置的stdClass类可用于创建空对象,进而存储从数据库中读取的数据。这种方法常用于需要明确区分“数组”与“对象”语义的后端处理中。

第4步:实例化stdClass并映射数据

创建一个stdClass实例,然后遍历之前收集的数组数据,将其逐个赋值给对象的属性。注意,这种操作会将数组索引作为对象属性名。

<?php
$jobj = new stdClass();
foreach($jarr as $key => $value){
    $jobj->$key = $value;
}
?>

第5步:再次编码为JSON

对生成的stdClass对象调用json_encode。此时,输出结果将变为一个对象结构,其键值为原数组的索引(如"0", "1"),内部依然保留数据详情。

<?php
echo json_encode($jobj);
?>

输出示例:

{"0":{"id":"1","name":"GNC"},"1":{"id":"2","name":"TCBJ"}}{}

关键差异与最佳实践

对比上述两种方法,可以发现它们在json_encode处理下的行为有显著区别:

  • 数组结构(推荐):直接保存多维数组通常是最符合RESTful API标准的做法,前端可直接将其解析为标准列表或字典。代码简洁,性能略优。
  • 对象结构:虽然能改变外层包装类型,但将数字索引转为对象键值往往不是主流API的设计模式。除非有特殊的前端框架绑定需求,否则一般不推荐使用此变通方法。

此外,务必注意编码参数JSON_UNESCAPED_UNICODE的使用,以避免中文内容被转义为难以阅读的Unicode码点,提升可读性和传输效率。同时,记得在处理完成后关闭数据库连接:

<?php
$con->close();
?>

总结

PHP中将数据库查询结果转为JSON主要通过json_encode完成。核心在于如何将mysqli取出的数据组织成合适的PHP数据类型。对于绝大多数Web应用接口,直接将查询结果封装为关联数组列表是最佳选择。以上就是PHP将数据库查询结果输出为JSON格式的详细内容,更多关于PHP数据库编程与API开发的技术资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。