2016-11-25 58 views
0

我一直试图移动所有查询以使用预准备语句。我已经能够使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")) 
+0

你有'上的错误恢复Next'某处的代码? – Lankymart

+3

'Set rs = cmd.Execute()'? –

+0

很好的@TimWilliams,错过了。 – Lankymart

回答

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")))