【问题标题】:How to store "key => value" pairs as strings for future parsing?如何将“key => value”对存储为字符串以供将来解析?
【发布时间】:2018-03-23 01:19:22
【问题描述】:

我使用 API,并根据通过该 API 传入的预期参数提供数据库表。

但是,API 经常更改,因此我在 MySQL 中有一个名为 unexpectedParameters 的“包罗万象”列,用于存储来自 API 的任何意外项目(例如,更新中引入的新项目名称和值对API),这样我就不会丢失它们。

我应该如何存储这些意外的 key => value 对,以便将来如有必要,我可以快速拉出 unexpectedParameters 列并对其进行解析,以使用新引入的列重新填充更新的表参数?

【问题讨论】:

  • PHP serialize() 格式,或者 JSON 编码,只要你不想直接从 db 字段访问那些未知的键/值就可以了。
  • 在您的具体情况下,http_build_query 也可能是一个选项。

标签: php mysql string api key-value


【解决方案1】:

好吧,如果我现在遇到这个问题,我会使用一个填充了 JSON 的文本字段。这维护了 key => value 连接,占用空间小,易于解析。

【讨论】:

  • +1 不仅很容易用多种语言进行解析,而且一些数据库还包含一些解析功能以允许某些操作保留在服务器中(如 90 年代的 XML!)
【解决方案2】:

一个快速的方法是使用serialize。试试这个

<?php
 $expected_params = array('user', 'dog', 'cat');
 if(isset($_POST) && count($_POST) > 0) {
  $unexpected_params = array();
  foreach($_POST as $key => $value) {
   if(!in_array($key, $expected_params)) {
    $unexpected_params[$key] = $value;
   }
  }
 }
 $up_serial = serialize($unexpected_params);

 // Pseudo DB functions
 $this->db->set('unexpected_params', $up_serial);
 $this->db->save();
?>

【讨论】:

    【解决方案3】:

    您应该将这些值标准化到额外的表格中。这应该可以帮助您保持较小的数据量,方便您使用意外参数的名称,并且您可以稍后根据每个参数进行处理。

    [api-table] -- 1:n -- [unexpected values] -- n:1 -- [parameter names]
    

    如果您想通过数据库服务器本身将过去大量处理为当前,这将特别有用。

    【讨论】:

    • 这听起来很有趣,但恐怕我不明白你的意思。您能否详细解释一下?谢谢!
    • 简单地说,但我不明白你会如何标准化这个,因为你事先不知道你会得到哪些意外参数,以及会有多少......
    • 这就是为什么会有这些关系。未预期的值链接到它所属的 api 表的条目。它还链接到包含名称的参数名称表。万一有一个意外的参数,如果它还不存在,它的名称将被输入到名称表中。然后它的 ID 将用于标记该参数正在插入的值。
    【解决方案4】:

    如果您不需要将其存储在 SQL 数据库中,则使用文件系统是一种更快的解决方案。

    我为此编写了一小段代码。它具有惊人的多功能性和快速性。你可以在这里找到它:[https://github.com/paragi/rocket-store]

    她的优点是“值”可以是数组。因此,您可以将任何复杂信息存储在一个键下:

    require "rocket-store.php";
    $rs = new Paragi\RocketStore();
    
    // Store a value, in the configuration collection
    $rs->post("configuration", $key, $value);
    
    // Retrieve a value from the configuration collection
    $value = $rs->get("configuration", $key);
    

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 1970-01-01
      • 2015-05-20
      • 2015-07-08
      • 1970-01-01
      • 2016-12-14
      • 2014-06-07
      • 1970-01-01
      • 2016-04-17
      相关资源
      最近更新 更多