2011-02-03 22 views
1

我试图在数据库中存储临时数据(如购物车产品,session_data)。我选择了YAML而不是serialize()函数。因为YAML数据在编程语言之间易于被人类和便携式读取。YAML或序列化()在MySQL中存储数据

如果我将临时数据存储在数据库中,我是否遇到了YAML的问题?

+1

YAML只是序列化数据的另一种方式,所以在我看来,与使用默认序列化相比,您不会遇到更多麻烦。是否应该存储序列化的数据是另一个问题 - 有时它是合理的,有时它不是。 – Kaitnieks 2011-02-03 16:04:01

+0

会话数据应该在会话处理程序调用自定义写入函数时自动序列化。至于购物车产品,您应该研究存储购物车产品的规范化格式,例如一个“购物车”表和一个“cart_items”表。 – Dereleased 2011-02-03 16:36:47

+0

或者查看已经编写并在市场上销售的许多现成的经过测试和验证的购物车解决方案之一,无论是免费还是收费 - 不属于NIH陷阱=) – Dereleased 2011-02-03 16:37:43

回答

1

只要确保你逃脱一切潜在危险即用户输入,你很好。

2

个人而言,我会使用序列化,原因有二:

  1. 其默认包含在PHP。
  2. 你放入的是你得到的东西。

关于第二点。 Serialize不仅转换为记录类型的字符串,而且PHP在对象上调用函数,因此您可以选择序列化以及在对数据进行反序列化时对数据执行的操作。

参见:__sleep and __wake

它可能不容易直接从数据库中读取,但它不会花两分钟写一个脚本,可以拉出来,unserialise它,做对数据的print_r的查看存储的内容。

2

就我个人而言,我不会使用YAML。它过于格式化(需要新的行,空白等),PHP中没有本地解析器。相反,我会为此使用JSON。它本身处理是微不足道的,而且是可读的(没有YAML那么多,但比序列化更多)。这是两全其美的。

但是,有了这个说法,你应该问自己一个问题,你为什么要在DB中的一个字段中存储一个复杂数据结构的序列化表示......对于大多数情况下,它可能会更好存储数据的标准化表示(所以它很容易搜索等)。存储序列化数据并不“坏”,但它可能不是最佳选择或正确的选择,这取决于你想要做什么。它通常比使用Entity-Attribute-Value存储好得多,但你需要真正考虑你在做什么来决定它是否是正确的。

相关问题