我一直试图将所有查询移动到使用预准备语句。我已经能够使INSERT和UPDATE命令正常工作,但由于某种原因,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语句的传递就像是真的一样。它似乎没有抛出任何错误。
if not (rs.eof and rs.bof) Then Response.Write(rs("username"))
答案 0 :(得分:0)
@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")))