2014-06-11 41 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...)