2016-05-26 4 views
0

を通過した私は、私の解決策は、次のようになりますので、それはSQLiteの中に挿入された最後の時間から経過した時間を作ることを考えた:SQL時間が

問題は、その時が何らかの理由で0のままである
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"); } 

。私は何が間違っている?

詳細:

(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

2つの列を作成して、作成して変更しないのはなぜですか。更新時に変更された列を更新し、変更と作成の間の時間差を進捗として取得しますか? – skywalker

答えて

-1

重要WARNING:

あなたのコードは、SQLインジェクションに開いています!準備された文を使用してパラメータをバインドすることを強くお勧めします。教育目的のために

ANSWER:('$user,0,

  • あなたは、タイプミスを持っています。しようとして

    "UPDATE progress SET time = CURRENT_TIMESTAMP - count" 
    

('$user',0,また

  • 、あなたの2番目のクエリでcount言葉について尋ねた後、あなたはそれが列だった言及:あなたは2つのアポストロフィ、1前後のものを持っている必要がありますCURRENT_TIMESTAMP - countを減算すると、配列で数値を減算しようとするようなものです:4 - array("hi", 5);。それは理にかなっておらず、あなたのデータベースはおそらくあなたがやろうとしていることを誤って解釈しているので、エラーが発生します。

    しかし、準備された文を使用してパラメータをバインドしてください。だけでなく、その後、あなたのコードの作品は、それが安全になります:)


    OPの要請で

    が、ここでプリペアドステートメントの例です:

    あなたの最初のクエリ$db->exec("...回しますあなたは、SQL文$sqlを準備して、あなたのパラメータ$userを結合している。ここ

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

    :これに。オンラインで多くの良いチュートリアルがあり、このプロセスをうまく学ぶことを強くお勧めします。

  • +0

    ええ、申し訳ありませんが、なぜ私は実際にそれを持っているのかわかりません、それは問題があるようです。 – user4316754

    +0

    準備されたステートメントの使い方の例を挙げてください。 – user4316754

    +0

    @ user4316754最後の行で 'count'とは何ですか? – Webeng