2011-10-12 80 views
2

在绝对紧急情况下,我试图通过我的网站并添加参数化查询。我是一个新手,只是刚刚了解他们。MySQL /经典ASP - 参数化查询

我的问题是,我只知道很少的连接类型,我看到的所有例子都使用了另一种连接方法,这让我感到困惑。我不特别想改变连接到我的数据库的方式,因为它在很多页面上,我只是想更新我的查询以便更安全。

这是怎么了,我一直连接到我的DB:

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 

这显然不工作,但我需要知道如果我能实际上是通过我所拥有的连接实现这一目标,或者我完全错过了一些阻止其工作的东西?

我出去,花了随后两天调试的东西我不熟悉之前,我想知道我至少在正确的轨道上......

回答

3

的代码在你的第二个片段是正确的,但要应用于新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拼写一个错字(在我的例子纠正)。

+0

非常感谢。我真的很感激它。一个问题,任何想法为什么我会得到错误“SQL数据类型超出范围”? – TheCarver

+0

最好问这个问题。 –

+0

好的,我注意到MySQL不喜欢(ad_nVarChar = 202),所以我将它改为(ad_varChar = 200)并且它工作正常。再次感谢.. – TheCarver