小编典典

MySQL /经典ASP-参数化查询

sql

在绝对紧急的情况下,我试图浏览我的网站并添加参数化查询。我是新手,才刚刚了解它们。

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

这就是我一直连接到数据库的方式:

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

显然它不起作用,但是我需要知道我是否可以使用已有的连接真正实现此目标,或者我是否完全失去了阻止它正常工作的功能?

在接下来的两天里调试我不熟悉的东西之前,我想知道我至少在正确的轨道上…


阅读 177

收藏
2021-04-07

共1个答案

小编典典

第二个代码段中的代码是正确的,但应将其应用于新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(在我的示例中已更正)。

2021-04-07