经典ASP准备语句SELECT不起作用
问题描述:
我一直试图移动所有查询以使用预准备语句。我已经能够使INSERT和UPDATE命令正常工作,但由于某些原因,SELECT语句无法正常工作。使用标准查询,我可以使用以下方法获得一行。经典ASP准备语句SELECT不起作用
strSQL = "SELECT username FROM users WHERE id = " & request.querystring("id")
Set rs = objConnection.Execute(strSQL, ,adCmdText)
当我把它转换成准备好的语句时,它似乎返回一个结果,但没有任何结果。
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConnection
cmd.CommandText = "SELECT username FROM users WHERE id = ?"
cmd.CommandType = adCmdText
cmd.Prepared = true
cmd.Parameters.Append(cmd.CreateParameter("@id", adVarChar, adParamInput, 255, request.querystring("id")))
rs = cmd.Execute()
查询返回的数据,但由于某些原因,下面如果语句将好像有一些数据。当这一行运行时,第一个查询将输出用户名。当准备好的语句运行时,它不输出任何内容,但if语句通过,如果真的如此。它似乎没有抛出任何错误。
if not (rs.eof and rs.bof) Then Response.Write(rs("username"))
答
来自@TimWilliams的评论是其中一个问题,还有第二个问题。 ID是一个整数字段,准备好的语句将其作为varchar发送。看起来很疯狂,因为有数据类型,但以下结合Tim的评论解决了这个问题。
cmd.Parameters.Append(cmd.CreateParameter("@id", adVarChar, adParamInput, 255, request.querystring("id")))
更改
cmd.Parameters.Append(cmd.CreateParameter("@id", 3, 1, , request.querystring("id")))
你有'上的错误恢复Next'某处的代码? – Lankymart
'Set rs = cmd.Execute()'? –
很好的@TimWilliams,错过了。 – Lankymart