如何使这个sql请求在我的php中工作?

如何使这个sql请求在我的php中工作?,php,mysql,Php,Mysql,我正试图在我的网站上建立一个非常基本的跟踪系统,只记录出席人数 不幸的是,下面的代码不起作用。我检查了服务器中的错误日志,基本上问题是:在第一次执行之后,没有找到任何实体,即使已经有一个具有该值的条目,因此代码直接转到“else”,然后崩溃,因为已经有一个具有该主键的条目。有人能帮我找到为什么在第一次执行时找不到实体吗 代码如下: $q = "SELECT date, amount FROM tracking WHERE date = ?"; $req = $bdd->prepare($q

我正试图在我的网站上建立一个非常基本的跟踪系统,只记录出席人数

不幸的是,下面的代码不起作用。我检查了服务器中的错误日志,基本上问题是:在第一次执行之后,没有找到任何实体,即使已经有一个具有该值的条目,因此代码直接转到“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,
        ]
    );
}

谢谢

看起来您的
跟踪
表每个
日期只能有一行
。有一种方法可以用MySQL的查询语言直接处理这个问题

首先,将
date
列作为表的主键,或在其上创建唯一索引。您可以像这样创建唯一索引

CREATE UNIQUE INDEX trackdate ON tracking(date);
然后使用这个查询进行插入/更新

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

每次运行此查询时,它要么插入必要的行,要么增加
金额
列。而且它是“原子化”的,这意味着如果两个不同的php程序实例试图同时执行,它不会混淆。

使用绑定参数,或者在,
bindParam
中传递数组,这是使用pdo执行查询的更好方法。可能值得一看
INSERT。。。在重复密钥更新时…
()以保存必须先检查的密钥。