繁体   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