PHP序列化数据库条目搞砸了我

时间:2011-05-05 20:47:56

标签: php serialization

O.K。所以我非常聪明 - 我已经创建了一个库来保存一堆WP主题,这些主题都是根据我的需要设置的,所以当我推出一个新网站时,我可以在几分钟内创建新的博客。

作为新域的持有者,sql文件中包含旧域的所有内容都替换为[token]。

一切都工作正常,直到我创建一个带有子主题的地方,显然在将数据输入数据库之前将其序列化。最终得到这样的东西:

Theme','a:8:{s:12:\"header_image\";s:92:\"http://[token]wp-content/uploads/2011/05/494-Caring-for-fruit-trees-PLR.jpg\";s:16:\"background_image

所以我深入研究了序列化,结果证明s:92位是例如该值中的字符数。由于我正在改变[令牌],它会改变并中断。

到目前为止,我对sql文件进行了所有更改,除了用sql文件填充数据库之外没有编辑数据库 - 但我对如何处理串行数组中的数据感到茫然

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是获取数据并使用unserialize()函数,例如

$arr = unserialize($data); 

然后以那种方式编辑数据。完成后,使用serialize()重新序列化,并将其存储回来。您可能必须对未序列化的数据执行print_r(),以查看它是如何存储的,以查看您需要编辑的内容。

如果直接从序列化数据进行更改,则必须获取当前子字符串的长度,进行更改,然后获取新长度并将其拼接回序列化数据,这样会更复杂比它需要的那样。