PHP / MySQL formatinng:如何使用此类数据的示例?

时间:2010-01-16 00:37:30

标签: php mysql database storage data-retrieval

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

一个: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”;} < / p>

字符和字母有什么用?例如我猜s:9:“max_inbox”是指一个包含九个字符的字符串,字符串是max_inbox。但是当从数据库中取出数据时,如何用PHP操作这些数据(以及为什么s:9是必要的)?

谢谢大家!

2 个答案:

答案 0 :(得分:4)

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

此外,我认为你所引用的数字可能需要进行标记化(不确定这是否是合适的术语)字符串更容易回到它的相关部分。在没有多想的情况下,我认为这是为了避免令牌化器可能会阻塞包含分隔符(:;“)的序列化对象的实际值的情况。

答案 1 :(得分:3)

使用PHP的unserialize函数对字符串进行解码。

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序列化。