2

私はAPIを使用し、そのAPIを介して入力される予想されるパラメーターに基づいてDBテーブルにフィードします。

ただし、APIは頻繁に変更されるため、APIからの予期しないアイテム(APIの更新で導入された新しいアイテム名と値のペアなど)に対してMySQLでTEXT呼び出される「catch-all」列があります。unexpectedParametersそれらを失うことはありません。

key => value将来、必要に応じてunexpectedParameters列をすばやくプルして解析し、更新されたテーブルにこれらの新しいパラメーター用に新しく導入された列を再入力できるように、これらの予期しないペアをどのように保存する必要がありますか?

4

4 に答える 4

3

さて、この2番目にその問題に直面した場合は、JSONが入力されたテキストフィールドを使用します。これにより、キー=>値の接続が維持され、スペースをほとんどとらず、簡単に解析できます。

于 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]

彼女の利点は、「値」を配列にできることです。したがって、複雑な情報を1つのキーに保存できます。

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 に答える