1

对于这种奇怪/模糊的问题,请提前抱歉:)。我现在已经多次遇到这种存储在 MySQL 数据库中的格式,我想知道这些数据是如何使用的?例如,这行代码来自 bbPress 论坛插件 bb_message。

a:8:{s:9:"max_inbox";i:50;s:13:"auto_add_link";b:1;s:9:"email_new";b:1;s:11:"email_reply";b :1;s:9: "email_add";b:1;s:13:"email_message";b:0;s:16:"threads_per_page";i:0;s:7:"版本";s:3 :"1.0";}

字符和字母是怎么回事?例如,我猜测 s:9:"max_inbox" 指的是一个由九个字符组成的字符串,该字符串是 max_inbox。但是当从数据库中提取这些数据时,它是如何用 PHP 操作的(为什么 s:9 是必要的)?

谢谢大家!

4

2 回答 2

4

我相信这是一个由 PHP 的序列化函数生成的字符串。此函数使您能够将(复杂)对象或数组表示为字符串。

此外,我认为您所指的数字可能需要使标记化(不确定这是否是适当的术语)将字符串返回到它的相关部分更容易。没有多想,我认为它是为了规避标记器可能会阻塞包含分隔符 (:;") 的序列化对象的实际值的情况。

于 2010-01-16T00:43:40.303 回答
3

使用 PHP 的unserialize函数来解码这样的字符串。

反序列化PHP 文档

该字符串解码为该数组,如下所示:

php > $f='a:8:{s:9:"max_inbox";i:50;s:13:"auto_add_link";b:1;s:9:"email_new";b:1;s:11:"email_reply";b:1;s:9:"email_add";b:1;s:13:"email_message";b:0;s:16:"threads_per_page";i:0;s:7:"version";s:3:"1.0";}';
php > var_dump(unserialize($f));
array(8) {
["max_inbox"]=>
int(50)
["auto_add_link"]=>
bool(true)
["email_new"]=>
bool(true)
["email_reply"]=>
bool(true)
["email_add"]=>
bool(true)
["email_message"]=>
bool(false)
["threads_per_page"]=>
int(0)
["version"]=>
string(3) "1.0"
}

像这样存储数据的原因是您可以在一个数据库字段中存储多个参数。

存储序列化数组可以让您不必担心数据库的架构。Friendfeed 以 MySQL 为例,它也类似于 MongoDB 等“NoSQL”存储系统的风格。我自己更喜欢使用 JSON 而不是 PHP 序列化。

于 2010-01-16T01:05:34.710 回答