SQL时间已经过去了

时间:2016-05-26 08:39:48

标签: php mysql sql sqlite

我想过自上次将它插入SQLITE以来已经过了一段时间,所以我的解决方案看起来像这样:

if($n==1) { $db->exec("INSERT INTO progress (user,time,count) VALUES ('$user',0,CURRENT_TIMESTAMP)"); }
//after 10 minutes $n becomes 2
if($n==2) { $db->exec("UPDATE progress SET time = CURRENT_TIMESTAMP - count"); }

问题是由于某种原因,时间仍然是0。我有什么想法吗?

更多详情:

(table)process[id,user,time,count]
//what I display from this table is user and time
count = Time at creation of the row,
time = 0 at creation of the row,
//Updating the row after some time has passed
time = current_time - count

1 个答案:

答案 0 :(得分:-1)

重要警告:

您的代码对SQL注入开放!强烈建议使用预准备语句并绑定参数,以防止在数据库中使用恶意代码。

用于教育目的的答案:

  • 你输错了:('$user,0,。你应该有两个撇号,一个在前,一个在后:('$user',0,

  • 此外,在询问第二个查询中的count字后,您提到它是一个专栏:

       "UPDATE progress SET time = CURRENT_TIMESTAMP - count"
    

尝试减去CURRENT_TIMESTAMP - count就像尝试通过数组减去一个数字:4 - array("hi", 5);。它没有意义,你的数据库可能误解了你想要做的事情,从而导致你的错误。

但请使用预准备语句并绑定您的参数。您的代码不仅会起作用,而且会安全:)

根据OP的要求,以下是预备声明的示例:

您的第一个查询$db->exec("...将转为:

$sql = "INSERT INTO progress (user,time,count) VALUES (:user, 0, CURRENT_TIMESTAMP)";
$stmt = $db->prepare($sql);
$stmt->bindParam(':user', $user);
$stmt->execute();

在这里,您要准备sql语句$sql,然后绑定参数$user。网上有很多很好的教程,强烈建议你好好学习这个过程。