讲师中心 微信公众号
AI工具推荐 视频效率加速

PHP 中安全高效地将新 JSON 数据追加到 MySQL 字段中的完整教程

夜涛姑娘_7514

夜涛姑娘_7514

发布时间:2026-02-09 11:40:26

|

594人浏览过

|

来源于php中文网

原创

PHP 中安全高效地将新 JSON 数据追加到 MySQL 字段中的完整教程

本文详解如何在 php 中正确读取、解析、追加并更新存储为 json 数组的 mysql 字段(如 `uyeler`),避免字符串拼接错误,兼容现代 php 版本,并使用 `mysqli` 预处理语句保障安全性与可靠性。

在 PHP 与 MySQL 开发中,将结构化数据(如用户列表)以 JSON 格式存入单个字段是一种常见做法,尤其适用于低频变更、关系较弱的嵌套数据。但直接对 JSON 字符串进行字符串拼接(如 '$uyelerim,$arrim')极易导致格式损坏——例如缺失外层方括号 []、引号转义错误或非法逗号分隔,最终使 json_decode() 失败或数据不可用。

正确的做法是:始终以数组为操作单元——先从数据库读取原始 JSON 字符串 → 安全解码为 PHP 关联数组 → 使用 [] 追加新元素 → 再整体编码回 JSON 字符串 → 通过预处理语句写回数据库。

以下为完整、可运行的实践代码(已移除过时的 mysql_* 函数,全面升级为面向对象 mysqli):

Remotion Word Highlight Subtitles
Remotion Word Highlight Subtitles

使用 Whisper 词级时间戳和 Remotion 渲染,为本地短视频添加词级高亮字幕。

下载
<?php
// ✅ 推荐:使用 mysqli 面向对象方式(支持 PHP 7.4+ 及 PHP 8.x)
$vtbaglan = new mysqli('localhost', 'your_user', 'your_password', 'your_database');

// 检查连接
if ($vtbaglan->connect_error) {
    die("数据库连接失败: " . $vtbaglan->connect_error);
}

// 1️⃣ 获取当前记录(注意:务必指定 id 或其他唯一条件)
$sorgum = $vtbaglan->query("SELECT id, uyeler FROM birlikler WHERE id = 1");
if (!$sorgum || $sorgum->num_rows === 0) {
    die("未找到 ID=1 的记录");
}
$sorgu = $sorgum->fetch_assoc();
$uyesim = json_decode($sorgu['uyeler'], true); // true → 返回关联数组

// 若字段为空或解码失败,初始化为空数组
if (!is_array($uyesim)) {
    $uyesim = [];
}

// 2️⃣ 处理表单提交(新增成员)
if (isset($_POST["verigir"])) {
    // ✅ 强制过滤输入(生产环境必备)
    $kullaniciadi   = filter_input(INPUT_POST, 'kullaniciadi', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
    $rutbe          = filter_input(INPUT_POST, 'rutbe', FILTER_SANITIZE_NUMBER_INT);
    $karakteradi    = filter_input(INPUT_POST, 'kadi', FILTER_SANITIZE_FULL_SPECIAL_CHARS);

    // ✅ 基础验证(示例:非空检查)
    if (empty($kullaniciadi) || empty($rutbe) || empty($karakteradi)) {
        echo "<p style='color:red'>所有字段均为必填项!</p>";
    } else {
        // 构建新成员数组
        $yeniUye = [
            'kullanici'     => $kullaniciadi,
            'rutbe'         => (int)$rutbe, // 确保整型
            'karakteradi'   => $karakteradi
        ];

        // ? 追加到现有数组(核心步骤)
        $uyesim[] = $yeniUye;

        // ✅ 使用预处理语句防止 SQL 注入
        $stmt = $vtbaglan->prepare("UPDATE birlikler SET uyeler = ? WHERE id = ?");
        $jsonString = json_encode($uyesim, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        $stmt->bind_param('si', $jsonString, $sorgu['id']);

        if ($stmt->execute()) {
            echo "<p style='color:green'>✅ 成员添加成功!</p>";
            // 可选:重定向避免重复提交(PRG 模式)
            // header("Location: " . $_SERVER['PHP_SELF']);
            // exit;
        } else {
            echo "<p style='color:red'>❌ 更新失败:" . $stmt->error . "</p>";
        }
        $stmt->close();
    }
}

// 3️⃣ 渲染页面:显示现有成员 + 表单
echo "<h3>当前成员列表:</h3>";
if (empty($uyesim)) {
    echo "<p>暂无成员</p>";
} else {
    foreach ($uyesim as $uye) {
        echo htmlspecialchars($uye['kullanici']) . " (等级: " . (int)$uye['rutbe'] . ", 角色: " . htmlspecialchars($uye['karakteradi']) . ")<br>";
    }
}

// 表单部分(注意:action 保持为空即提交到当前页)
echo <<<HTML
<form method="post">
    <input type="text" name="kullaniciadi" placeholder="用户名" required>
    <input type="number" name="rutbe" placeholder="等级" min="1" max="99" required>
    <input type="text" name="kadi" placeholder="角色名" required>
    <button type="submit" name="verigir">添加成员</button>
</form>
HTML;

$vtbaglan->close();
?>

? 关键注意事项与最佳实践:

立即学习“PHP免费学习笔记(深入)”;

  • *绝不使用 `mysql_函数**:该扩展自 PHP 7.0 起已被彻底移除,存在严重安全与维护风险;必须使用mysqli或PDO`。
  • JSON 解码后务必验证类型:json_decode() 在失败时返回 null,需用 is_array() 判断,避免 foreach 报错。
  • 预处理语句是硬性要求:直接拼接变量到 SQL(如 "UPDATE ... '$arrim'")属于高危 SQL 注入漏洞,必须杜绝。
  • 输入过滤不可省略:filter_input() 是基础防线,复杂场景建议结合 htmlspecialchars() 输出转义与服务端业务校验。
  • JSON 编码选项优化:JSON_UNESCAPED_UNICODE 保证中文不被转义为 \uXXXX;JSON_UNESCAPED_SLASHES 提升可读性。
  • 考虑扩展性:若成员数量增长或需频繁查询/筛选,应重构为独立 uyeler 关联表,而非 JSON 字段。

通过以上方法,你不仅能稳定实现 JSON 数据追加,更构建了符合现代 PHP 安全规范与工程实践的可靠数据操作流程。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4463

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

931

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1169

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6421

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3223

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6380

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

8721

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1190

2024.04.29

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 190人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn