【问题标题】:Why should I not insert serialized arrays into my database field?为什么我不应该将序列化的数组插入到我的数据库字段中?
【发布时间】:2011-07-30 03:44:48
【问题描述】:

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

【问题讨论】:

  • @alexantd 我倾向于同意,除了你强调的问题没有解释为什么如果 PHP 本身会使用它不是一个好主意。谢谢,虽然你是对的,但我应该检查得更好。

标签: php mysql session serialization


【解决方案1】:

在某些情况下这并没有错。会话管理绝对是可以接受的情况之一。要记住的是,如果您发现自己试图在序列化数据和数据库中的任何字段之间关联数据,那么您就犯了一个巨大的设计缺陷,不幸的是,我看到人们试图这样做。

对任何“从不做 x”持保留态度,因为在某些情况下,几乎任何技术都可能是正确的。该建议通常针对那些很容易误解正确用法并将自己编码到非常讨厌的角落的菜鸟。

【讨论】:

  • 正如上面 Jon Skeet 的回答中提到的,我可以看到对于相应的数据,您不希望它序列化。我只是不明白为什么它会被允许用于会话数据,但由于会话数据实际上只适用于 PHP,所以它是安全的。谢谢你的回答。
  • 为什么您会在提出主观问题后 1 小时内接受答案?似乎您已经下定决心,只是在寻找一些确认。许多人会不同意绿色复选标记,原因是他们不再有任何解释的动机。我只会非常强烈地强调 Ruport 先生回答的“在某些情况下”部分。三重强调“确定”。
  • @alexantd - 是的,您对链接的重复问题的回答更加详尽。享用英雄饼干。
【解决方案2】:

取决于数据。通过将特定于语言的数据结构存储在与该语言相关联的字段中,并且您也放弃了数据库可以为您提供的任何东西。您将没有特定字段的索引、无法运行简单更新、无法提取部分数据、无法进行数据检查、引用完整性等等。

【讨论】:

  • 你会在序列化会话中存储什么样的有用的东西?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您有多确定您永远不想从 PHP 以外的任何平台获取这些数据?

    我不知道 PHP 的序列化形式,但是我知道知道的每个平台的默认二进制序列化格式在其他平台上都无法使用...通常数据不是一个好主意仅将单个前端编码到数据库中。

    即使您最终没有使用任何其他语言,这也意味着数据库本身不会知道有关信息的任何信息 - 因此您将无法查询它等等。也许这不是问题在你的情况下 - 但这绝对是要记住的事情。

    【讨论】:

    • 同意,如果我使用的是普通数据,那么不序列化是有意义的。我以前从未听说过这个,正如我所提到的,我知道 PHP 确实使用序列化,这让我感到奇怪。
    猜你喜欢
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2013-01-19
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多