数据以哪种格式存储在WordPress数据库中?

时间:2020-08-26 作者:Ashutosh Kumar

在很多情况下,我看到wordpress以类似JSON的结构存储数据,但不完全是JSON。

例如,在usermeta表中,这是值(元键为wpkgbe\\u功能)a:1:{s:13:administrator:1:1;}

它看起来是一个JSON数据结构,但并不完全是一个JSON数据结构。我们如何解码这个结构,它叫什么?

1 个回复
SO网友:Tom J Nowell

这不是JSON,而是序列化的PHP数据。如果您试图存储非原始字符串/数字的值,例如对象或数组,WordPress会使用PHP对其进行序列化。

我们如何解码这个结构

deserialize( ... );

However, I do not recommend relying on this for practical and security reasons. Don\'t store structured data as strings in the database, and if you must do it, use JSON or CSV.

对于数据WP存储,您不会反序列化数据,而是调用相关的WordPress/插件API,让WordPress/插件处理它。使用直接数据库调用访问WP数据和绕过基于PHP的API是初学者常见的错误。

安全性和向后兼容性

因为传递复杂数据将使其透明地序列化和反序列化到PHP中以便于使用,所以切换到风险较小的标准格式(如JSON)并不是一项简单的任务。

安全问题(即对象反序列化攻击)使情况变得更糟。当对象被反序列化、运行其构造函数并打开潜在的攻击向量时,PHP将重新创建对象。

当用户天真地执行UPDATE sql查询以更改文本值,例如搜索替换URL。这是因为序列化数据结构包含值的长度,因此如果值更改了长度,但数字没有更新,则结构已损坏。

相关推荐

在多个环境中同步插件设置(wp_options表)

你们如何处理数据库更改,尤其是设置(wp\\u选项)?我在寻找类似的东西,有一个JSON文件(或类似于Laravel的迁移文件)和设置,我可以在部署后运行。例如,安装WooCommerce后,我有一个列表,其中包含我要立即使用和导入的默认设置(预设)。但一旦我添加了一个新的功能或插件,我就可以跨多个环境迁移这些设置。如果JSON文件(或设置文件)是基于环境的,那就太酷了。所以我可以在本地使用测试支付方式设置,在生产中使用实时设置。只需在我的部署脚本中运行wp migrate options之类的命令,即可