-1

APIを介して、次のJSON応答を取得しています。

status: "550",
created: "2012-07-02 19:00:58",
reason: "550 #5.1.0 Address rejected. ",
email: "somemail@dummy.org"

この応答をデータベースに保存したいのですが、

データベースにデータが入力されるたびに、一意であるために、実際にはタイムスタンプである「作成済み」フィールドが必要です。作成するスクリプトは基本的にcronジョブであるため、データベースに同じレコードを何度も追加したくありません。

タイムスタンプに基づいてデータベースにデータを入力するにはどうすればよいですか?

また、から抽出されたバウンスコードを抽出するにはどうすればよいですか?

reason: "550 #5.1.0 Address rejected. ",

ここでバウンスコードは

5.1.0

案内してください、

4

2 に答える 2

2

1-重複するエントリを避けます

列を一意にする-タイムスタンプ列にUNIQUEインデックスを追加して、同じ列を再度挿入しようとするとデータベースサーバーが文句を言うようにします。

CREATE UNIQUE INDEX name_of_index ON tablename (created);

この後、INSERT IGNORE INTOまたはREPLACE INTOテーブルを実行すると、失敗するか、既存の行が更新されます。

値が存在するかどうかを確認する-何かを挿入する前にクエリを実行して、タイムスタンプが存在するかどうかを確認できます。

SELECT count(created) FROM tablename WHERE created = '2012-07-02 19:00:58';

結果が> 0、そのタイムスタンプの行がすでにあることがわかっている場合は、挿入しないでください。これは、クエリと挿入ステートメントの間に他の誰もそのDBに何も入れない場合に安全です。

常に削除して挿入-3番目の方法は、そのタイムスタンプを持つすべての行を予防的に削除し、後で行を挿入することです。

DELETE FROM tablename WHERE created = '2012-07-02 19:00:58';
INSERT INTO tablename [...];

しかし、私はあなたがここでやろうとしていることを実際には理解していないので、あなたはあなたの質問を編集し、より具体的にする必要があるでしょう。

2-バウンスコードを抽出します

それらの理由がどのように見えるかによって異なります。他にがないと仮定しても安全な場合は、と最初の文字列の間の文字列を抽出することでコードにアクセスできます。ここでは正規表現は必要ありません。または、AndréCatitaの回答を参照してください。#space#

于 2012-07-05T20:22:56.960 に答える
2

バウンスコードを取得するには、正規表現を使用します。簡単な方法は次のとおりです。

$string = 'asdsa#5.3.1 A';
preg_match('/#(.+) /is', $string, $match);
echo $match[1]; // match[1] will be '5.1.0'

そして、「作成された」変数をタイムスタンプに変換したいと思いますか?受け取る日付は関数の有効な複合形式であり、次のように正しく機能するため、strtotimeを使用してください。

$created = '2012-07-02 19:00:58';
$timestamp = strtotime($created);

このようにして、日付をタイムスタンプに変換し、タイムスタンプの列が一意であることを確認します。

于 2012-07-05T20:27:05.453 に答える