我想过自上次将它插入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
答案 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
。网上有很多很好的教程,强烈建议你好好学习这个过程。