通过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
请指导我,
答案 0 :(得分:2)
1 - 避免重复输入
使列唯一 - 在时间戳列中添加UNIQUE
index,以便数据库服务器在您尝试再次插入相同内容时进行投诉。
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
,则表示您已经拥有该时间戳的行,因此您不会插入。如果没有其他人在查询和插入语句之间放置该数据库中的任何内容,这是安全的。
始终删除并插入 - 第三种方法是预防性地删除具有该时间戳的所有行,然后插入一行。
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);
这样您就可以将日期转换为时间戳,然后只需确保时间戳列是唯一的。