classic asp + VBscript + mssql2008根据用户输入的关键词mykey查询数据库表utable中的uname字段含有这个关键词mykey的记录,我的代码如下:
mykey=request.QueryString("mykey")
set myCommand = Server.CreateObject("ADODB.Command")
myCommand.ActiveConnection=conn
myCommand.CommandType=1
myCommand.CommandText="select * from utable where uname like ?"
myCommand.Parameters.Append(myCommand.CreateParameter("uname",129,1,50,"%"+mykey+"%"))
myCommand.Prepared = true
set rs = myCommand.Execute
查询不到记录!
请问应该怎么写才正确? 请园中的classic asp老鸟抽空给予解答,感激不尽!!!
网上找到的例子:
<%
Set
conn = Server.CreateObject(
"ADODB.Connection"
)
conn.Open
"Your connection string"
set cmd = server.createobject(
"ADODB.Command"
)
sql =
" SELECT * FROM table WHERE id = ? or name like ?"
cmd.ActiveConnection = conn
cmd.CommandText = qText
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900
cmd.Parameters.Append cmd.CreateParameter(
"@id"
, adInteger, adParamInput, ,request(
"id"
))
cmd.Parameters.Append cmd.CreateParameter(
"@name"
, adVarchar, adParamInput, 50,
"%"
& request(
"name"
) &
"%"
)
set rs = cmd.Execute
Set
rs =
Nothing
Set
conn =
Nothing
%>
myCommand.CommandText="select * from utable where uname like @uname"
myCommand.Parameters.Append(myCommand.CreateParameter("@uname",129,1,50,"%"+mykey+"%"))
换成这样可以不?以前写asp没用过参数,但按照SQL的参数格式,你的写法是不好的。
谢谢,这样也是不可以的哦,classic asp中参数占位只能用?
classic asp vbscript太古老了,网上资料都快匿迹了,查了两天资料都没查到可行的
@webFollower: 只能用 ? 做参数占位?这个不理想,应该还有别的办法解决。
不过,如果不考虑SQL注入,或者进行过滤,可以把代码修改为:
myCommand.CommandText="select * from utable where uname like ‘%" & mykey & "'"
然后,把参数配置处理掉。
这里为了安全,务必对mykey的内容进行SQL注入过滤,最简单的方案是:mykey.replace("'", "''")
@519740105: classic asp vbscript中是只能用 ? 的
就是用参数化查询方式防注入,为了程序的规范、一致性,现在就是在寻求参数化查询方式的模糊查询的写法,希望知道的前辈给予解答!
@webFollower: 还真头痛。
想质问你为什么还使用ASP,但我想一定还有理由的。
非必要,一般都不会使用ASP了,再去研究这个的成本真的很高,以前写ASP的时候,都是通过我前面的方案进行SQL注入的防备,倒一直没有想过通过参数的方式来处理。