2013-05-26 88 views
2

我有這個查詢應該激活帳戶,但由於某種原因沒有工作。Mysql更新查詢奇怪的行爲

UPDATE users 
    SET activated = "1" 
    WHERE MD5(CONCAT(id, "putka")) = "5d98df6042ab7baa283606f8c8045a90" 

5d98df6042ab7baa283606f8c8045a90是ID 2023 +鹽的MD5哈希值。該查詢什麼都不做,但不返回錯誤,即0 rows affected

我跑下面的查詢,看看我是否得到任何結果

SELECT id 
    FROM users 
    WHERE MD5(CONCAT(id, 'putka')) = '5d98df6042ab7baa283606f8c8045a90' 

並返回2023,因爲它應該。任何人都知道爲什麼更新不起作用?

模式的2場:

id int(11) NOT NULL AUTO_INCREMENT 

activated tinyint(4) NOT NULL DEFAULT '0' 
+0

您是否嘗試過在CONCAT函數中爲字段ID添加反引號以更新查詢? '在哪裏嘗試了MD5(CONCAT(\'id \',「putka」))' –

+0

,看看它有沒有什麼區別 - 事實並非如此。選擇查詢分別適用於兩種方式更新查詢不會與它們一起工作 –

+1

@php_nub_qq您可以發佈show create table對於您的表的樣子嗎?我在用'id'和'activated'列創建的測試表上運行你的第一個函數,並正確更新了這一行。 – Joshmaker

回答

0

我重新啓動MySQL和Apache和它開始工作像預想的那樣。這真的很奇怪,我很想知道是什麼導致了錯誤 - 雖然:/

+0

重新啓動Apache不會影響MySQL,但可能會影響您用來與MySQL通信的任何代碼的緩存 – Joshmaker

+0

重新啓動後,「已激活」是否已更新?如果沒有,也許你沒有提交交易?如果是這樣,也許在檢查'activated'的值時,您處於事務隔離級別,導致查看預先更新的數據? – eggyal

+0

激活未更新,重新啓動後第一次測試時它變爲1。我想這是你提出的第二種情況,那就是造成這一切的壞男孩。 –