[英]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.