2014-06-11 36 views
-1

當我們編寫一個Web應用程序時,我們將使用SQL準備而不是concat SQL字符串來避免SQL注入。例如:SQL準備在哪裏

sql.exec("select * from user where user_id=?", user_id) 

但如何編寫SQL準備WHERE...IN?例如:

sql.exec("select * from user where user_id in ?", user_ids) 

如果這是不可能的。在這種情況下避免SQL注入的正確方法是什麼?

謝謝。

+0

也許我並不清楚。我不問在PHP中的方式。我想知道在支持MySQL驅動程序的語言中是否有一些常規方法。 –

+0

什麼是應用程序主機語言?請注意,大多數驅動程序不支持數組參數,所以基本答案是相同的 - 構建一個替換變量列表,然後綁定這些值。 –

+0

@ Clockwork-Muse我現在正在使用Golang。 –

回答

0

變化user_ids字符串ID數組:

idArr = strings.Split(user_ids, ",") 

創建SQL:

vals := []interface{}{} 
sqlStr := "select * from user where user_id in (" 
for _,v := range idArr { 
    vals = append(vals, v) 
    sqlStr += "?," 
} 
sqlStr = strings.TrimRight(sqlStr, ",") 
sqlStr += ")" 

stmt, err := db.Prepare(sqlStr) 
if err!=nil{ 
    return err 
} 
defer stmt.Close() 

rows, err := stmt.Query(vals...)