2013-07-25 36 views
0

$ salt2我正在登錄系統上工作,並且在更新我的鹽表時遇到問題。我不是sql的專家,但我知道我的方式。在MySQL中更新錯誤值

我的查詢來更新爲:

UPDATE hashTable SET `salt1` = 'salt1here' AND `salt2` = 'salt2here' WHERE `userID` = userID 

userID是一個整數值,所以我不需要引述。

當我更新該表salt1設置爲值0。我使用PHP創建我的SQL查詢,看起來像:

UPDATE hashTable SET `salt1` = '$salt1' AND `$salt2` = 'salt2here' WHERE `userID` = $userID 

邊注:我知道SQL注入和我有保護 反對,在我的代碼。在這種情況下,我不需要這樣做,因爲 salt值是由腳本生成的,而用戶ID是由函數返回的值 。任何有我使用用戶輸入的地方我都會去掉 斜線,並有防止注射的方法。

對我來說,我的SQL查詢似乎是正確的,我知道我的價值觀是正確的,因爲這是一個動態創建的查詢看起來是這樣的:

UPDATE hashTable SET `salt1` = '9d6db1743e5e0cf1bb0e8cd799c0640231a10ec21e1612a6ed46e8ea16862835' AND `salt2` = '0824b2aac446ccfbd719645f84b13443cbcf59ee4e6dabace8c421ff6a8c6688' WHERE `userID` = 1374770432 

我甚至進入,在直接到phpMyAdmin,它說0 rows affected但仍將我的salt1行更改爲0

我有點困惑,因爲它看起來像我正在做的一切正常,但顯然我不是。

+0

請不要**不使用[正確的SQL轉義](http://bobby-tables.com/php)使用字符串插值插入數據。 – tadman

+0

請再閱讀我的文章。我已經採取了預防措施,我沒有包括在代碼示例中。 –

+0

如果它不是非常明顯,那麼你就是這麼做的,我的意思是'mysql_real_escape_string'就在你的查詢中間,那麼假設它被轉義是不安全的。如果你甚至錯過了其中一個*,你的整個應用程序就會被銷燬。這就是爲什麼強烈推薦使用參數化查詢的原因,與這種使用字符串連接組合的危險且易於出錯的方式相比。當你說你使用「strip sloses」時,我非常擔心,因爲這對SQL注入保護沒有任何作用。 – tadman

回答

3

你的SQL查詢是錯誤的;

UPDATE hashTable 
SET `salt1` = '$salt1' AND `$salt2` = 'salt2here' 
WHERE `userID` = $userID 

...應該是...

UPDATE hashTable 
SET `salt1` = '$salt1', `$salt2` = 'salt2here' 
WHERE `userID` = $userID 

目前,你在做$salt1$salt2 = 'salt2here'(這似乎在這種情況下返回0)之間的AND操作和存儲在salt1

+0

非常感謝!我不敢相信我沒有抓到! –

+0

@EvanStoddard總是比在坐在那裏的人更容易發現看到別人的肩膀的錯誤:) –

+0

同意!當我的時間限制結束時,我會接受這個答案。 –