gpt4 book ai didi

php - 带有 ADDTIME CURTIME 的 mysqli 准备语句失败

转载 作者:行者123 更新时间:2023-11-29 00:08:50 25 4
gpt4 key购买 nike

SO 上有很多关于失败的准备语句的问题,但我找不到能解决我的确切问题(或至少解释它)的问题。

我正在尝试为我的用户提供一个有效期为 5 分钟的登录 token 。

当我通过 PHPMyAdmin 执行查询时,它工作得很好:

工作查询

INSERT INTO LOGGEDIN (userID, loggedInToken, loggedInRefresh) VALUES 
(1, "HJKFSJKFDSKLJFLS", ADDTIME(CURTIME(), '00:05:00'));

但是,当尝试使用准备好的语句通过 PHP 执行查询时失败。

$stmt = $this->conn->prepare("INSERT INTO LOGGEDIN VALUES (userID, loggedInToken, loggedInRefresh) VALUES (?, ?, ADDTIME(CURTIME(), '00:05:00'))");
$stmt->bind_param("is", $userID, $token);

我得到错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES (?, ?, ADDTIME(CURTIME(), '00:05:00'))' at line 1

这是完全相同的查询,所以我认为这是由于 prepare 处理查询的方式所致。

我还尝试输入 '00:05:00' 作为变量,因为我认为 ' 是导致错误的原因,但它也失败了。

$five_minutes = '00:05:00';
$stmt->bind_param("iss", $userID, $token, $five_minutes);

当我删除准备并使用以下查询时:

$query = "INSERT INTO LOGGEDIN VALUES (userID, loggedInToken, loggedInRefresh) VALUES (" . $userID . ", '" . $token . "', ADDTIME(CURTIME(), '00:05:00'))";
if ($result = $mysqli->query($query)) {
...

它工作正常,但我想保持我的代码一致,并尽可能使用准备好的语句。

如何使用准备好的语句让这个查询正确执行?如果一切都失败了,我想我可以在 PHP 中创建时间戳并将它传递给数据库,从而绕过整个 ADDTIME 计算,但我想首先知道是什么导致了问题。

问题需要被理解,而不是回避。

最佳答案

您的查询中有多余的 VALUES:

$stmt = $this->conn->prepare("INSERT INTO LOGGEDIN VALUES (userID, loggedInToken, loggedInRefresh) VALUES (?, ?, ADDTIME(CURTIME(), '00:05:00'))");
^^

删除:

$stmt = $this->conn->prepare("INSERT INTO LOGGEDIN (userID, loggedInToken, loggedInRefresh) VALUES (?, ?, ADDTIME(CURTIME(), '00:05:00'))");

关于php - 带有 ADDTIME CURTIME 的 mysqli 准备语句失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26202416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com