【问题标题】:Colon separated values in database数据库中的冒号分隔值
【发布时间】:2011-09-23 17:06:46
【问题描述】:

我有以下格式的数据库结果:

s:6:hobbit

s 是“字符串”,值是第三部分的字符数。这个叫什么?冒号分隔值?是通过正则表达式在 PHP 中处理它的唯一方法吗?

具体来说,我正在尝试获取值hobbit。但很明显,当我访问数据库以获取任何东西时,我得到了整个值s:6:hobbit。我注定要使用正则表达式来处理这样的结果吗?

【问题讨论】:

  • 您使用的是什么数据库?表的架构是什么?
  • 这被称为“设计错误”。但是有很多更轻量级的选项可以处理这样的正则表达式。

标签: php mysql regex database


【解决方案1】:

看起来像 serialize() 的输出。 (提示:unserialize()*)

或者,您可以在: 上使用limit=3 explode()。这很重要,因为字符串本身(从第二个 : 向前的所有内容)可能包含冒号。

另外,为什么这些值首先在数据库中?


*)EDIT 似乎serialize() 会将字符串编码为s:6:"hobbit"(引用)所以explode() 可以证明是这样做。

【讨论】:

  • "为什么这些值首先在数据库中?"它被许多应用程序使用。在我的例子中,它用于 ActiveCollab。
  • @gaoshan88 好吧,我见过更糟糕的:)
  • 是的...它是序列化的。我省略了字符串上的引号,但查看数据库中的数据是def。连载()。谢谢。
  • @gaoshan88 太好了。至于你的问题“这叫什么?”我猜答案是“PHP 可存储表示”(在手册中)或者只是“PHP 序列化值”。
【解决方案2】:
list($tmp, $tmp, $string) = explode(':', $dbString);
echo $string;

演示:http://codepad.org/z91CztFm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2022-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多