2011-10-12 79 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