mysqli编写了ADDTIME CURTIME语句失败
问题描述:
对于没有准备好的语句,SO上有很多问题,但我找不到解决我确切问题(或解释它,至少)的问题。mysqli编写了ADDTIME CURTIME语句失败
我试图给我的用户一个有效5分钟的登录令牌。
当我执行通过phpmyadmin它工作得很好查询:
工作QUERY
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
这是完全相同的查询,所以我认为这是由于该如何处理准备的查询。
我也尝试输入'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'))");
那么,这是令人尴尬的。谢谢! – Rijstkoek 2014-10-05 12:20:22
@Rijstkoek没有概率的人,我很高兴这个帮助 – Ghost 2014-10-05 12:31:32