2017-01-30 75 views
2

我有一個簡單的nodejs應用程序,它執行以下查詢。在mysql節點中的IN子句

select * from User where userid in (?) 

我得到的用戶ID是一個JSON數組從客戶端發送。我如何在這個選擇查詢中使用它?我試過 1.本身但不工作。 2.將它轉換爲Javascript數組,不工作

+2

份額的代碼。 –

+0

你可以這樣做:select * from User where userid in(?,?,?,?) –

回答

0
  1. 將JSON數組展開爲所需格式的字符串。使用'+'連接查詢。 (小心SQL注入)
  2. 動態添加'?'使用持有用戶ID的JSON數組的長度。然後使用該數組來提供用戶ID。

這些是我嘗試的兩種方法。兩者都有效。然後我用一種更好的方法改變了我的邏輯,所以現在我不再需要'in'子句了。

+0

方法#1是引入SQL注入的好方法。 – robertklep

+0

我以爲是。對不起,我忘了在回答中添加。這就是爲什麼我改變了我的方法。 –

0

你可以這樣做:(?,?,?,) SELECT * FROM用戶凡在用戶ID

var array = []; 
array.push(value); 
array.push(value); 
array.push(value); 
array.push(value); 

然後使用數組作爲參數那應該是綁定的。

+1

這對於具有恆定大小的數組很好,但如果大小可以變化呢? – Aaron

+0

您必須添加?動態,因爲我在我的項目中使用 –

+0

我擴展了json數組到一個字符串在所需的格式,然後只是與查詢字符串+。那是不好的方法? –

0

重溫這一點,因爲問題的原始方法是有效的,但有一些注意事項。如果您唯一的轉義參數是IN子句中的參數,那麼您必須將其指定爲嵌套數組;如:[[''usrId1','usrId2','usrIdN']]。這是因爲un-escaping功能需要一個數組,取代每個'?'與相應的數組元素。所以,如果你想替換你唯一的'?'對於一個數組,該數組應該是所有傳遞參數的第一個元素。如果你有多個「?」,語法更直觀,但最後一致;在這種情況下,你可以有類似於你的論點: 'myOtherArgument1', 'myOtherArgument2',[ 'usrId1', 'usrId2', 'usrIdN'], 'myOtherArgument3']