新闻中心

Php数组文件怎么存进数据库_Php数组存数据库序列化与json存储法【教程】

2025-12-16
浏览次数:
返回列表
推荐使用 serialize() 或 json_encode() 将 PHP 数组转为字符串存储:前者保留完整类型和引用,后者跨语言兼容且可读性强;均需配合 PDO 预处理安全写入,并根据数据规模选择 TEXT 等合适字段类型,同时注意反序列化与 JSON 解码的安全防护。

php数组文件怎么存进数据库_php数组存数据库序列化与json存储法【教程】

如果您需要将 PHP 数组保存到数据库中,但数据库字段不支持原生数组类型,则必须将数组转换为可存储的字符串格式。以下是两种常用且兼容性良好的存储方法:

一、使用 serialize() 序列化存储

PHP 的 serialize() 函数可将数组(包括嵌套数组、对象、布尔值、null 等)转换为可存储的字符串格式,读取时通过 unserialize() 还原为原始结构,适用于需完整保留 PHP 类型和引用关系的场景。

1、在 PHP 脚本中定义待存储的数组,例如:$data = ['name' => '张三', 'scores' => [85, 92, 78], 'active' => true];

2、调用 serialize($data) 得到字符串,如:'a:3:{s:4:"name";s:6:"张三";s:6:"scores";a:3:{i:0;i:85;i:1;i:92;i:2;i:78;}s:6:"active";b:1;}'

3、将该字符串插入数据库 VARCHAR 或 TEXT 字段,确保字段长度足够容纳序列化结果(建议 TEXT 类型)。

4、从数据库读取后,使用 unserialize($stored_string) 恢复为原始数组。

二、使用 json_encode() JSON 格式存储

json_encode() 将 PHP 数组转换为标准 JSON 字符串,具有跨语言兼容性高、可读性强、数据库索引友好等优势,但会丢失 PHP 特有类型(如资源、资源句柄、部分对象),且关联键名仅支持字符串或数字。

1、定义数组,例如:$data = ['user_id' => 1001, 'tags' => ['php', 'mysql', 'html'], 'created_at' => date('c')];

2、执行 json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) 生成 UTF-8 安全的 JSON 字符串。

3、将结果存入数据库 TEXT 字段;若需后续在 SQL 中部分查询(如 MySQL 5.7+),可配合 JSON 类型字段使用。

4、读取后调用 json_decode($json_string, true) 转回关联数组(第二个参数设为 true)。

三、使用 PDO 预处理语句安全写入

无论采用序列化还是 JSON 方式,都应避免直接拼接 SQL 字符串,防止注入风险。PDO 预处理可确保数据被正确转义并绑定为字符串参数。

1、建立 PDO 连接并设置错误模式为异常:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

2、准备插入语句,如:$stmt = $pdo->prepare("INSERT INTO config_table (key_name, value_data) VALUES (?, ?)");

3、对数组执行序列化或 JSON 编码后,绑定为字符串参数:$stmt->bindValue(2, $encoded_string, PDO::PARAM_STR);

4、执行插入:$stmt->execute();

四、选择字段类型的注意事项

MySQL 中应根据数据规模选择合适字段类型:短数组可用 VARCHAR(1024),中长数组推荐 TEXT,超大结构(如含大量日志或嵌套)建议用 MEDIUMTEXT。若使用 JSON 类型字段,须确认 MySQL 版本 ≥ 5.7.8 且已启用 JSON 支持。

1、建表时声明 JSON 字段:value_data JSON

2、插入前验证 JSON 合法性:if (json_last_error() !== JSON_ERROR_NONE) { /* 报错处理 */ }

3、避免在 JSON 字段上使用 LIKE 查询,应改用 MySQL 内置 JSON 函数如 JSON_CONTAINS()JSON_EXTRACT()

五、反序列化与 JSON 解码的安全防护

从数据库读取并还原数据时,必须防范恶意构造的序列化字符串或非法 JSON,尤其当数据来源不可信或含用户输入时。

1、对 unserialize() 使用白名单类机制,传入第二个参数 ['allowed_classes' => ['MyDataClass']](PHP 7.0+)。

2、对 json_decode() 检查返回值是否为 null 并验证错误:if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception('Invalid JSON'); }

3、禁止将未过滤的数据库字段内容直接传入 unserialize(),除非该字段由可信代码写入且无外部修改通道。

以上就是Php数组文件怎么存进数据库_Php数组存数据库序列化与json存储法【教程】的详细内容,更多请关注php中文网其它相关文章!


# 第二个  # e通网网站建设  # 长安专业网站建设价钱  # 宝鸡网站的优化  # 美团推广运营销售话术  # 涿州网站推广  # 建设网站现在免费吗  # 登封推广视频营销  # 乐云seo索高粱seo  # 健康新闻网站有哪些平台推广  # 广西网站建设公司活动  # 器及  # 追溯到  # 结构化  # 数据处理  # mysql  # 转换为  # 报错  # 序列化  # 化与  # red  # 报错处理  # 安全防护  # ai  # 编码  # json  # js  # html  # php 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  微信群消息显示延迟如何解决 微信群消息刷新优化方法  J*a递归快速排序中静态变量导致数据累积问题的解决方案  怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  css链接悬停下划线样式如何自定义_使用::after结合content和transition  MAC的“快捷指令”怎么同步到iPhone_MAC利用iCloud同步所有设备的自动化指令  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  单射、满射与双射的关系 一文理清所有逻辑  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样  J*aScript对象创建方式_J*aScript设计模式应用  怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】  Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  Django通过AJAX异步上传图片并保存至模型的完整指南  2025-2030年全球乘用车销量预测:新能源成增长主力  Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  马斯克:Optimus 人形机器人复数形式为 Optimi  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  J*a中实现Go语言select通道多路复用机制  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  c++ 获取系统当前时间 c++时间戳获取方法  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  夸克浏览器网页版最新地址 夸克浏览器官方入口合集  必由学官方登录入口 必由学教师学生账号快速访问  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符  vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  《刺客信条4:黑旗》重制版新细节曝光:无缝加载 地图更细致!  c++20的std::jthread是什么_c++可中断线程与RAII式管理  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法  邮政快递单号查询入口 邮政快递物流信息在线查询入口  零跑汽车11月交付量达70327台 实现连续9个月正增长  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  快手官方唯一登录入口 谨防山寨钓鱼网站  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  怎么去除衣服上的口红印_生活小妙招教你用酒精轻松擦除  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  解决Flask中Quill编辑器内容提交失败及TypeError的指南  Selenium Python中处理点击后新窗口加载冻结问题的策略与实践 

搜索