-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 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 - 提取退回代码

取决于这些原因可能是什么样子。如果可以安全地假设没有其他. 这里不需要正则表达式。或者干脆参考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 回答