2

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

但是,API 经常更改,因此我在 MySQL 中为来自 API 的任何意外项目(例如,在 API 更新中引入的新项目名称和值对)调用了一个“包罗万象”TEXT列,所以我不unexpectedParameters不要失去他们。

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

4

4 回答 4

3

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

于 2012-10-26T15:52:20.300 回答
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();
?>
于 2012-10-26T15:55:25.477 回答
1

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

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

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

于 2012-10-26T15:58:47.510 回答
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);
于 2018-02-03T19:37:25.653 回答