PHP操作MySQL数据库记录与JSON数据返回完整指南

陈默
陈默
发布时间:2026-10-16 | 6人浏览过
原创

在使用PHP进行后台数据处理时,从MySQL数据库中获取记录并返回给前端是核心环节。本文将系统介绍如何查询数据库、计算记录总数、遍历结果集并将其序列化为JSON格式,同时详细解析 fetch_array、fetch_row 等函数的参数用法及分页处理逻辑。

结果或目标

掌握使用PDO或 mysqli 扩展连接 MySQL 数据库,并能灵活处理以下场景:

  • 获取满足条件的记录总数。
  • 遍历查询结果集并格式化输出。
  • 将多维数组转换为 JSON 字符串供前端(如 Layui)调用。
  • 理解不同 fetch 函数在索引与关联数组间的区别。

准备条件

环境要求:

  • 已安装并运行 MySQL 服务。
  • 配置好 PHP 运行环境(推荐 PHP 7.0+),并确保 php_mysqli 扩展已启用。
  • 准备好数据库配置文件(例如 linkConfig.php),其中定义了数据库主机、用户名、密码及库名。

第1步:建立数据库连接

首先引入数据库配置文件以确保安全认证,建议使用面向对象的方式初始化 MySQLi 对象。

<?php
require 'linkConfig.php'; // 引入连接配置
$mysqli = new mysqli($host, $user, $pass, $dbname);
if ($mysqli->connect_error) {
    die('Connection failed: ' . $mysqli->connect_error);
}
$mysqli->set_charset("utf8");
?>

第2步:获取数据表的记录总数

当需要统计满足特定条件的行数时,使用 COUNT(*) 聚合函数配合 SQL 查询。

实现方案:

<?php
$sql = "SELECT COUNT(*) AS total FROM druserlist WHERE C04='普通用户'";
$result = $mysqli->query($sql);
$row = $result->fetch_assoc();
echo '记录总数:' . $row['total'];

// 释放资源并关闭连接
$result->free();
$mysqli->close();
?>

在此处也可以通过 fetch_row() 获取数值,如 $row[0],但在命名清晰的场景下,使用别名 AS total 更具可读性。

第3步:获取数据查询表记录并返回JSON格式

将多条记录封装为数组,并利用 json_encode 输出标准 JSON 数据,方便前端接收。

代码示例:

<?php
$sql = "SELECT * FROM druserlist";
$res = $mysqli->query($sql);
$result = array();

while ($row = $res->fetch_assoc()) {
    array_push($result, $row);
}

header('Content-Type: application/json');
echo json_encode($result);

$res->free();
$mysqli->close();
?>

输出效果:

[
  {"C01": "00924001", "C02": "经理办01", "C04": "普通用户"},
  {"C01": "00924002", "C02": "经理办02", "C04": "普通用户"}
]

第4步:处理分页数据(以Layui为例)

Layui 表格通常要求返回包含 code、count(总条数)和 data(当前页数据)的对象。需根据前端传入的页码 (page) 和每页条数 (limit) 计算偏移量。

操作步骤:

  1. 获取请求参数并进行安全过滤(转为整型)。
  2. 先执行一次计数查询获取总页数。
  3. 再执行带 LIMIT offset, length 子句的查询获取当前页数据。
  4. 组装符合 Layui 规范的结构化响应。
<?php
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$limit = isset($_POST['limit']) ? intval($_POST['limit']) : 10;
$offset = ($page - 1) * $limit;

// 1. 获取总数
$sqlCount = "SELECT COUNT(*) as count FROM druserlist";
$resultCount = $mysqli->query($sqlCount);
$totalRow = $resultCount->fetch_assoc();

// 2. 获取分页数据
$sqlData = "SELECT * FROM druserlist ORDER BY C01 LIMIT $offset, $limit";
$resultData = $mysqli->query($sqlData);
$dataList = array();
while ($row = $resultData->fetch_assoc()) {
    array_push($dataList, $row);
}

// 3. 构建统一返回结构
$returnArr = [
    'code' => 0,
    'msg' => '',
    'count' => (int)$totalRow['count'],
    'data' => $dataList
];

echo json_encode($returnArr);
$resultCount->free();
$resultData->free();
$mysqli->close();
?>

原文有依据的排错

在处理 MySQLi 结果集时,常见的错误是将索引与关联数组混用导致取值失败。请根据需求选择正确的提取函数:

解析 fetch_array 的参数差异

mysqli_fetch_array 默认返回两种类型的数组(索引和关联)。可以通过第二个参数控制输出类型:

  • MYSQLI_NUM:仅返回数字索引数组(如 $row[0])。
  • MYSQLI_ASSOC:仅返回关联数组(如 $row['C01'])。
  • MYSQLI_BOTH:同时返回上述两者(默认值)。
// 演示三种获取方式
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
    echo $row['C01'].' ';
}

fetch_all 的使用注意事项

fetch_all(MYSQLI_ASSOC) 会将整个结果集一次性加载到内存中。适用于数据量较小的场景;若数据庞大,建议改用 fetch_assoc() 配合 while 循环逐行处理以节省内存。

简要总结

以上介绍了PHP操作MySQL数据库进行记录获取、分页转换及JSON返回的核心流程。重点在于合理使用 fetch_assoc 获取关联数组以便构建 JSON,以及利用 LIMIT 语句实现高效的数据分页。更多关于PHP数据库优化与前后端分离的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表