【问题标题】:Serialized data in database - how to echo, filter and format it with php?数据库中的序列化数据 - 如何使用 php 回显、过滤和格式化?
【发布时间】:2013-09-10 16:33:29
【问题描述】:

希望我在这个问题上问对了,我对序列化/反序列化功能一点也不熟悉。

1) 我有一个数据库表“data”,其中有一个名为“demo_data”的字段。每个字段都包含一堆随机字符,字符串非常非常长。示例:4fh7fjks2u839dk... (...) 我意识到要显示该字段的内容,必须首先使用反序列化函数处理数据(参见步骤 2)。

2) 函数是这样的:

反序列化定义:

function unserialize($data) {
    if (is_serialized($data)) {
        return @unserialize($data);
    }

    return $data;
}

调用反序列化函数:

function display_demo_data() {
    return unserialize(base64_decode(data_field('demo_data')));
}

3) 上面的函数确实有效(经过测试,整个脚本很大,不是我自己写的)

4) 重要部分:调用'demo_data'中存储的数据

<?php echo display_demo_data(); ?>

我正确地得到了存储的值:

{"value_min":0,"value_max":0,"sString":"demo"}

如您所见,这对最终用户来说是非常不愉快的。我想要的是?我希望数据格式正确,如下所示:

Value (Min): 0
Value (Max): - I wish to discard this values and info from echo call
sString: Demo

有人知道格式化/过滤返回的数据吗?

谢谢, 开发101

【问题讨论】:

  • 呃...如果数据被序列化,您将 unserialize() 重新定义为自身的递归函数。这将导致无限递归,然后... *戴上太阳镜* Stack Overflow。 YYYYEEEEEEAAAAAAAAAHHHHHHHHHHHHHHHHHHHHH
  • 正如我所说,它工作正常,我可能错过了一些重要的东西,但我不能在这里复制整个脚本......
  • Hrmm... 你的unserialize() 函数是类方法吗?这是我看到不会引发致命错误的唯一方法。
  • 嗨,Sammitch,正如我上面所说的,我对这个功能一无所知。但是,你可能是对的。这就是我能找到的与串行/非串行内容相关的所有代码。

标签: php sql json serialization


【解决方案1】:

你的回报是 json_encoded。

$foo = '{"value_min":0,"value_max":0,"sString":"demo"}';
var_dump(json_decode($foo));

假设 display_demo_data() 返回 json,你会这样做:

<?php
$value = json_decode(display_demo_data());
?>

之后,您可以使用 $value 对象来打印您的数据。例如:

<?php
   print $value->value_min;
?>

【讨论】:

  • 是的,大概就是这样,这个脚本里面有很多json的东西(不好意思提这个,我不太了解这些东西)。那么,我必须将这些行准确地放在哪里?
  • 感谢大家的帮助,麻烦的是值 0,0,demo 是动态的,每个用户都不同,我不认识他们!这就是为什么我首先尝试从数据库中获取它们。仍然没有结果。
  • 那么...您在示例 2 和示例 3 中看到任何硬值吗?
  • 这是怎么回事:这是用户搜索的序列化字符串。它包含搜索关键字和许多其他字段。它在 db 中编码,我尝试在用户的个人资料(sString)上提取该关键字。我的第一行有问题,不知道放在哪里,通常这不起作用(好像函数不存在,或者它返回旧数据,如原始问题中的一行数据)。希望这会有所帮助。您的第一行包含像 0,0,demo 这样的搜索结果——这是一个动态值。
  • 第一个sn-p是告诉你你的数据是json_encoded。代码段二和三是您可以在代码中使用的一次。将$value-&gt;value_min 替换为$value-&gt;sString 以返回字符串。
【解决方案2】:

如果它的 JSON 数据,你可以像这样解码它

$returnValue = json_decode('{"value_min":0,"value_max":0,"sString":"demo"}');

并使用

$returnValue -> value_min;

$returnValue -> value_max;

$returnValue -> sString;

【讨论】:

  • Thanx Ajeet,你能告诉我我必须把这段代码放在哪里吗?在 php echo 部分,或第二个函数(我原来的问题中的“调用”,正如我命名的那样)。谢谢
猜你喜欢
  • 2014-07-19
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2015-08-07
  • 2019-04-21
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多