日期:2014-05-16  浏览次数:20849 次

ADODB.Command怎么写关于“IN”操作符的参数化SQL命令
本帖最后由 yezzi 于 2012-12-04 11:49:30 编辑
大家知道为了防止SQL注入式攻击,在查询数据库的时候最好用ADODB.Command创建参数化的SQL查询语句

比如

Set rs_cmd = Server.CreateObject("ADODB.Command")
rs_cmd.ActiveConnection = conn
rs_cmd.CommandText = "SELECT * FROM user WHERE id = ?"
rs_cmd.CommandType = 1 'adCmdText
rs_cmd.Parameters.Append rs_cmd.CreateParameter("id", 5, 1, -1, 888)
Set rs = rs_cmd.Execute()
'或者
Set rs = rs_cmd.Execute(, Array(888))


但是有个问题来了,我想用SQL的In操作符
比如这样的SQL语句:SELECT * FROM user WHERE id IN (777, 888, 999)
我就不知道怎么写参数化命令了

我写成下面这样也不对

rs_cmd.CommandText = "SELECT * FROM user WHERE id IN (?)"
rs_cmd.Parameters.Append rs_cmd.CreateParameter("ids", 5, 1, -1, "777,888,999")
Set rs = rs_cmd.Execute()
'或者
Set rs = rs_cmd.Execute(, Array("777,888,999"))

希望大侠帮帮忙


------解决方案--------------------
只是一组id的话可以用正则表达式判断一下 /^\d+(\,\d+)*$/ ,如果测试通过可以放心用 sql拼接去解决的了。
否则的话,就转成 N 组的SELECT ...id=? OR id=? OR ... 
------解决方案--------------------
http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html

http://blog.csdn.net/pittroll/article/details/6641054