2013-07-25 54 views
-1

我試圖運行這個循環,我希望'我'的值改變。Javascript for循環似乎沒有改變'我'的價值?

但是,對於該循環的所有4次迭代,該值似乎都固定爲零。

for(var i=0;i<5;i++){ 

     client.query('SELECT curattend FROM table1 WHERE ind=("++i++")', function(err,result){ 
     att = result[0].curattend; 
     console.log(att) 
     }); 
} 

有沒有人對爲什麼發生這種情況有什麼建議?謝謝!

+1

你硬編碼'結果[0]'而不是使用'結果[I]'。也許你還打算連接成字符串? –

+0

即使使用'result [i]',我也會認爲'client.query'是異步的,這意味着你仍然會得到一個不希望的結果。如果是這樣,找到處理循環中分配處理程序的數百個問題之一。 –

回答

4

你沒有在查詢中包括變量i,你只是詢問了硬編碼字符串("++i++")

此:

client.query('SELECT curattend FROM table1 WHERE ind=("++i++")', function(err,result){

應該是:

client.query('SELECT curattend FROM table1 WHERE ind = ?', [i], function(err,result){

+0

謝謝!這也適用。也許也是一個小清潔工。 – pj409

+2

這個例子在技術上並不重要,但在構建傳遞給數據庫的查詢字符串時,您應該習慣於使用佔位符(上面的'?')。幾乎每個數據庫客戶端庫都有一個等效的功能,它可以讓數據庫客戶端庫對輸入參數進行適當的轉義和清理。有時候,你可能不太確定這個值是什麼樣的,使用簡單的字符串連接可能是一個主要的安全問題。 – adpalumbo

2

你已經把「++ i ++」放在用單個qoutes(')括起來的字符串中。您也必須使用單引號來轉義字符串。

使用此:

client.query('SELECT curattend FROM table1 WHERE ind=('+i+')', function(err,result){ 
+0

是的,它做到了!謝謝! – pj409