为什么我不应该将序列化数组插入我的数据库字段?

时间:2011-04-05 16:56:12

标签: php mysql session serialization

我刚刚看到对这个问题Inserting into a serialized array in PHP的第一个评论,这让我想知道为什么?特别是当您使用数据库管理会话(基于数据库的会话处理)时,会发生这种情况,会话处理程序将序列化数组插入到数据库字段中。

4 个答案:

答案 0 :(得分:4)

在某些情况下,这没有任何问题。会话管理绝对是可以接受的情况之一。需要记住的是,如果您发现自己试图将序列化数据与数据库中的任何字段之间的数据联系起来,那么您就会遇到巨大的设计缺陷,不幸的是,这是我见过的人们试图做的事情。

任何“永远不要做x”与一粒盐,因为几乎任何技术在某些情况下都是正确的。建议通常针对那些非常容易误解正确使用并将自己编码到一个非常讨厌的角落的新手。

答案 1 :(得分:3)

你有多么肯定你不想从PHP以外的任何平台获取数据?

我不知道PHP的序列化形式,但是我 所知道的每个平台的默认二进制序列化格式都无法与其他平台一起运行...通常数据不是一个好主意仅为数据库中的单个前端编码。

即使您最终没有使用任何其他语言,也意味着数据库本身不会对该信息有所了解 - 因此您无法对其进行查询等等。也许这不是问题在你的情况下 - 但它肯定是要记住的。

答案 2 :(得分:2)

反对序列化数据的主要论点是序列化数据难以搜索并且不可能有效地进行搜索,即不首先检索记录。

答案 3 :(得分:1)

取决于数据。通过在字段中存储特定于语言的数据结构,您将与该语言绑定,并且您也放弃了数据库可以提供给您的任何内容。您不会在特定字段上有索引,无法运行简单更新,无法提取部分数据,无法进行数据检查,参照完整性等。