2017-05-21 68 views
-1

您好我有一個更新用戶在我的數據庫中最後一次登錄時間的問題,如果我將它設置爲更新不同的列它完美的工作,但它只是不工作,當我嘗試更新特定列「lastlogin」。日期時間字段將不會在MySQL數據庫中更新

我的代碼:

@mysql_query("UPDATE my_users SET lastlogin=NOW() WHERE id=".$_SESSION["id"]); 

My DB column: 

column name: lastlogin 

type: datetime 

Null: No 

Default: 0000-00-00 00:00:00 

任何問題的方式列在DB設置?就像我上面提到的,如果我要告訴它將NOW()放在另一列中,它可以正常工作。

+3

我建議你在'mysql_query'之前的符號處刪除'@'。如果出現錯誤,我想我們想知道這件事。另一項建議是:在調用'mysql_query'之前,將動態生成的SQL語句分配給變量,然後在調用'mysql_query'之前將echo或vardump變量用於調試,我們可以將該SQL語句帶到另一個客戶端進行測試。那麼'id'列的數據類型是什麼?是'$ _SESSION [「id」]整數的值嗎?不推薦使用mysql_'接口函數,並刪除PHP 7.使用PDO或mysqli並準備帶有綁定佔位符的語句。 – spencer7593

+0

@ spencer7593感謝您的建議。我知道查詢正在工作,因爲如果我將「lastlogin」更改爲任何其他數據庫字段,它會將數據插入到數據庫中。問題是當試圖插入「lastlogin」列時。 –

+0

排除了一些可能性......在表中定義了一個'BEFORE UPDATE'觸發器,它將一個值賦給'lastlogin',沒有'AFTER UPDATE'引發錯誤並回滾事務。我建議你嘗試更新*兩個*列,將NOW()賦值給'logindate'和另一個表列。看看另一列的更新是否成功。 – spencer7593

回答

0

使用mysql_error試圖找出錯誤,然後發佈到這裏,所以我們可以幫助,如果你需要它。 (會評論,但低代表)

0

從我過去的經驗,mysql_query()不必在執行sql之前替換變量。嘗試以這種格式寫作。還可以使用mysql_error來檢查是否有與你的代碼執行的任何問題:

$sql = "UPDATE my_users SET lastlogin=NOW() WHERE id=".$_SESSION["id"]; 
mysql_query($sql) or die(mysql_error()); 

如果沒有錯誤,則有幾種可能性,爲什麼laslogin條目不發生的事情:

  • $ _SESSION [「id」]不包含任何值,並且沒有值被傳遞給mysql。
  • 沒有與$ _SESSION [「id」]匹配的id。

要調試:

  • 也可以嘗試更新一些列。
  • 您可能還需要檢查,如果你使用的是像PDO正確的擴展名..

還發現,早期版本的MySQL不支持與更新日期時間列NOW()。在這種情況下,嘗試將列類型重置爲TIMESTAMP。詳情請參閱:https://bugs.mysql.com/bug.php?id=27645

+0

嗨,就像我提到的,PHP代碼工作正常,我可以告訴它寫入數據庫中的不同列沒有問題。 –

+0

奇怪。嘗試將列類型重置爲TIMESTAMP。引用這個https://bugs.mysql.com/bug.php?id=27645 –

0

已解決。還有另外一個類似的聲明,這是在騎這一個!我多麼愚蠢,但很容易錯過!

相關問題