到目前爲止我還沒能找到答案......也許有人在這裏可以提供幫助。在我的WHERE上使用IN截斷了不正確的DOUBLE值
,我發現了以下錯誤:錯誤運行的查詢... ::::錯誤:ER_TRUNCATED_WRONG_VALUE:截斷不正確DOUBLE值:「2,4」
發生這種情況時使用mysql運行一個查詢模塊在nodejs中。查詢如下:
selectQ = "UPDATE usr SET pass = ?, last_updator = ?, last_update = NOW() WHERE id IN (?);"
我打電話這樣說:
con.query(selectQ,[hash,lupdator,usrs], function (err, rows) {...});
這工作得很好,只要我只有在的USR變量一個數字,但是當我的列表數字(在看起來像「2,4」的連接字符串)我得到上面的截斷錯誤。
任何想法?謝謝!
最終結果是:
每回答正確標註使用準備好的聲明中對我的「IN」沒有工作。我相信如果我傳遞一個單引號字符串的列表來查找基於文本的數據類型,但查詢是將轉義的INT傳遞爲文本字符類型,它會正常工作。
Anyhoo ...我只是驗證我的數組中的所有項都是數字,如果他們是我加入數組並將它傳遞到準備好的查詢中。我不相信這會讓我暴露於注射,但如果我錯了,隨時糾正我。這裏是我的代碼:
for(i = 0; i < usr.length; i++){
if(!IsNumeric(usr[i])){
callback("Password hash failed, server side issue.",null); return;
}
}
var usrs = usr.join(',');
selectQ = "UPDATE usr SET pass = ?, last_updator = ?, last_update = NOW() WHERE id IN ("+usrs+");"
準備好的陳述不能像那樣工作。你必須有一個'IN'子句,每個單獨的參數都有足夠的'?'條目。 – Pointy
擁有太多'?'(通常)是安全的,只需用空值填充未使用的插槽即可。 – Pointy
在Postgresql中,您可以使用一個數組運算符,這個運算符不那麼雜亂。 – Pointy