我正在建立一个系统,将用户的IP与上次发布内容的时间一起保存到表中。 首先,我用
检查用户IP的已存在记录SELECT lastpost FROM users WHERE ip = '$IP'
然后检查该查询的结果是否为空,如果是,则表示用户的IP不存在且应该记录,所以我继续执行此查询:
INSERT INTO users (ip, lastpost) VALUES ('$IP', '$ctime')
其中$IP
是使用$_SERVER['REMOTE_ADDR']
获取的用户IP,$ctime
是创建时间字符串using date("Y-m-j H:i:s")
。
即使在执行后一个查询后数据存在于表中,我仍然会收到错误
SQLSTATE[HY000]: General error
这本身并不是很有帮助。我想知道我在这里做错了什么。提前谢谢。
PS:我将使用这个问题来询问如何使用查询比较我使用PHP date()
计算的时间与表中已存在的时间(类型为“datetime”),以查看使用date()
计算的值是否大于数据库中的值至少一分钟。
答案 0 :(得分:1)
我首先尝试将$ctime
投射为日期时间CAST('$ctime' AS DATETIME)
,看看是否有效。
测试微小差异使用TIMEDIFF()
。
SELECT IF(TIMEDIFF(CAST('$ctime' AS DATETIME), lastpost) > CAST('00:01:00.000000' AS DATETIME), /*do this*/, /*else do this*/)
这将返回时差。如果时差为负,则$ctime
早于lastpost。但是你可以在这里进入相当精细的粒度。
看看上面是否有帮助。
(哦,我通过Google找到了所有这些并搜索了mysql和datediff,timediff或者演员。)