在绝对紧急的情况下,我试图浏览我的网站并添加参数化查询。我是新手,才刚刚了解它们。
我的问题是,我对连接类型知之甚少,我看到的所有示例都在使用另一种连接方法,这使我感到困惑。我不想改变连接数据库的方式,因为它在很多页面上,我只是想更新我的查询以使其更安全。
这就是我一直连接到数据库的方式:
Set connContent = Server.CreateObject("ADODB.Connection") connContent.ConnectionString = "...blah...blah...blah..." connContent.Open
这是带有参数的SQL位:
username = Trim(Request("username")) connContent.Prepared = True Const ad_nVarChar = 202 Const ad_ParamInput = 1 SQL = " SELECT * FROM users WHERE (username=?) ; " Set newParameter = connContent.CreateParameter("@username", ad_nVarChar, adParamInput, 20, username) connContent.Parameters.Append newParameter Set rs = connContent.Execute(SQL) If NOT rs.EOF Then ' Do something... End If rs.Close
显然它不起作用,但是我需要知道我是否可以使用已有的连接真正实现此目标,或者我是否完全失去了阻止它正常工作的功能?
在接下来的两天里调试我不熟悉的东西之前,我想知道我至少在正确的轨道上…
第二个代码段中的代码是正确的,但应将其应用于新ADODB.Command对象,而不是Connection对象:
ADODB.Command
Connection
username = Trim(Request("username")) '-----Added this----- Dim cmdContent Set cmdContent = Server.CreateObject("ADODB.Command") ' Use this line to associate the Command with your previously opened connection Set cmdContent.ActiveConnection = connContent '-------------------- cmdContent.Prepared = True Const ad_nVarChar = 202 Const ad_ParamInput = 1 SQL = " SELECT * FROM users WHERE (username=?) ; " Set newParameter = cmdContent.CreateParameter("@username", ad_nVarChar, ad_ParamInput, 20, username) cmdContent.Parameters.Append newParameter cmdContent.CommandText = SQL Set rs = cmdContent.Execute If NOT rs.EOF Then ' Do something... End If rs.Close
顺便说一句,有一个拼写为adParamInput而不是的错字ad_ParamInput(在我的示例中已更正)。
adParamInput
ad_ParamInput