簡體   English   中英

如何使這個 sql 請求在我的 php 中工作?

[英]How can I make this sql request work in my php?

我正在嘗試在我的網站上創建一個非常基本的跟蹤系統,只記錄在場人數。

不幸的是,下面的代碼不起作用。 我檢查了服務器中的錯誤日志,基本上這是問題所在:第一次執行后沒有找到實體,即使已經有一個具有該值的條目,所以代碼直接進入“else”然后崩潰,因為已經有一個具有該主鍵的條目。 有人可以幫我找出為什么它在第一次執行時找不到實體嗎?

這是代碼:

$q = "SELECT date, amount FROM tracking WHERE date = ?";
$req = $bdd->prepare($q);
$req->execute(date("Y-m-d"));
$results = $req->fetchAll();
if (count($results) != 0){
    $results["amount"] = $results["amount"] + 1;
    $track = $bdd->prepare("UPDATE tracking SET amount = ? WHERE DATE(date) = ?");
    $track->execute(array($results["amount"], date("Y-m-d")));
    exit;
}
else{
    $q = 'INSERT INTO tracking (date, amount) VALUES (:val1, :val2)';
    $req = $bdd->prepare($q);
    $req->execute(
        [
            "val1" => date(Y-m-d),
            "val2" => 1,
        ]
    );
}

謝謝

看起來您的tracking表每個date只能有一行。 有一種方法可以直接在 MySQL 的查詢語言中處理。

首先,將date列作為表的主鍵,或在其上創建唯一索引。 您可以像這樣創建唯一索引。

CREATE UNIQUE INDEX trackdate ON tracking(date);

然后使用這個單一的查詢來做你的插入/更新。

INSERT INTO tracking (date, amount) VALUES (CURDATE(), 1)
   ON DUPLICATE KEY UPDATE amount = amount + 1;

每次運行此查詢時,它要么插入必要的行,要么增加amount列。 它“原子地”執行它,這意味着如果兩個不同的 php 程序實例嘗試同時執行它,它不會混淆。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM