根据数据库的时间戳保存JSON响应

时间:2012-07-05 20:12:21

标签: php mysql sql regex json

通过API,我得到了JSON响应,

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

我希望将此响应保存到数据库中,

每次填充数据库时,我需要“Created”字段,这实际上是一个时间戳,是唯一的,我要编写的脚本基本上是一个cron作业,所以我不想多次添加相同的记录数据库,

如何根据时间戳填充数据库?

另外,我如何提取从

中提取的退回代码
reason: "550 #5.1.0 Address rejected. ",

这里的退回代码是

  

5.1.0

请指导我,

2 个答案:

答案 0 :(得分:2)

1 - 避免重复输入

使列唯一 - 在时间戳列中添加UNIQUE index,以便数据库服务器在您尝试再次插入相同内容时进行投诉。

CREATE UNIQUE INDEX name_of_index ON tablename (created);

在此之后,您可以INSERT IGNORE INTOREPLACE INTO表格,它将失败或更新现有行。

检查值是否存在 - 您可以在插入任何内容之前执行查询,检查时间戳是否存在。

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

如果结果为> 0,则表示您已经拥有该时间戳的行,因此您不会插入。如果没有其他人在查询和插入语句之间放置该数据库中的任何内容,这是安全的。

始终删除并插入 - 第三种方法是预防性地删除具有该时间戳的所有行,然后插入一行。

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

但由于我没有真正得到你想要做的事情,你需要编辑你的问题并更具体。

2 - 提取退回代码

取决于这些原因是什么样的。如果可以安全地假设没有其他#,则可以在space#之后的extracting the string之间找到代码。这里不需要正则表达式。或者只是参考André Catita's answer

答案 1 :(得分: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);

这样您就可以将日期转换为时间戳,然后只需确保时间戳列是唯一的。