如何将“key => value”对存储为字符串以供将来解析?

时间:2012-10-26 15:50:11

标签: php mysql string api key-value

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

但是,API经常更改,因此我在MySQL中有一个名为TEXT的“catch-all”unexpectedParameters列,用于来自API的任何意外项目(例如,新项目名称和值对在API的更新中引入,以便我不会丢失它们。

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

4 个答案:

答案 0 :(得分:3)

好吧,如果我第二次遇到这个问题,我会使用一个填充了JSON的文本字段。这保持了key =>值连接,占用空间小,易于解析。

答案 1 :(得分:1)

快速执行此操作的方法是使用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();
?>

答案 2 :(得分:1)

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

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

如果您想通过数据库服务器本身将过去大规模处理为当前,这将非常有用。

答案 3 :(得分:0)

如果您不需要将其存储在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);