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