MySQL / Classic ASP - параметризованные запросы - PullRequest
2 голосов
/ 12 октября 2011

В чрезвычайной ситуации я пытаюсь просмотреть свой веб-сайт и добавить параметризованные запросы. Я новичок и только что узнал о них.

Моя проблема в том, что я очень мало знаю о типах подключения, и во всех примерах, которые я вижу, используются другие методы подключения, что меня смущает. Я не особо хочу менять способ подключения к своей БД, поскольку на многих страницах я просто хочу обновить свои запросы, чтобы сделать их более безопасными.

Вот как я подключался к своей БД:

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

Очевидно, что это не работает, но мне нужно знать, могу ли я на самом деле добиться этого, используя имеющееся у меня соединение, или я что-то упускаю, что мешает ему работать?

Прежде чем я уйду и потрачу следующие 2 дня на отладку чего-то, с чем я не знаком, я хотел бы знать, что я хотя бы на правильном пути ...

1 Ответ

4 голосов
/ 12 октября 2011

Код во втором фрагменте правилен, но его следует применять к новому объекту 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 (исправлено в моем примере).

...