1
對於沒有準備好的語句,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計算,但我想知道是什麼導致了這個問題。
問題需要了解,而不是閃避。
那麼,這是令人尷尬的。謝謝! – Rijstkoek 2014-10-05 12:20:22
@Rijstkoek沒有概率的人,我很高興這個幫助 – Ghost 2014-10-05 12:31:32