0

我是剛剛開始學習網絡開發的學生。對於我的任務,我得到了一個網站,我需要安全地防止SQL注入。我試圖這樣做使用參數,但是我得到一個錯誤。提供者錯誤「80020005」類型不匹配

原代碼(下)工作得很好:

function logInUser(name,pwd) { 
    var DBConn = getDBConnection(); 
    var SQL = "SELECT * FROM Users WHERE UserName = '" + name + "' and UserPwd = '" + pwd + "'"; 
    var RS  = DBConn.Execute(SQL); 
    var valid = !RS.Eof; 
    if (valid) { 
     Session("UserID") = RS("UserID").value; 
     Session("UserName") = RS("UserName").value; 
     Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value; 
    } 
    DBConn.Close; 
    return valid; 
    } 

我試圖修改它以這樣的方式 功能logInUser(名稱,PWD){VAR = DBConn getDBConnection();

var uName = name; 
    var uPwd = pwd; 

    var SQL = "SELECT * FROM Users WHERE UserName = @0 and UserPwd = @1"; 

    var RS  = DBConn.Execute(SQL,uName,uPwd); 
    var valid = !RS.Eof; 
    if (valid) { 
     Session("UserID") = RS("UserID").value; 
     Session("UserName") = RS("UserName").value; 
     Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value; 
    } 

當我這樣做時,我得到:提供者錯誤'80020005'類型不匹配。

我也嘗試修改語句來取一個參數,但是後來我得到引擎錯誤「80040e10」沒有給出一個或多個必需參數的值。

任何幫助將非常感謝,非常感謝!

回答

0

EDITED :::

var oCmd = Server.CreateObject("ADODB.Command") 
var SQL = "SELECT * FROM Users WHERE UserName = ? and UserPwd = ?"; 
oCmd.CommandText = SQL 
oCmd.ActiveConnection= DBconn 
var oPar = oCmd.CreateParameter("UserName ", uName); 
oCmd.Parameters.Append(oPar); 
var oPar2 = oCmd.CreateParameter("UserPwd", uPwd); 
oCmd.Parameters.Append(oPar2); 

var RS =oCmd.Execute() 

ORIGINAL ::: 好吧,我承認我不知道你正在尋找的數據庫連接模式,但我敢打賭,你需要把你的uNameuPwd成一個對象:

var credentials = { 
    0: uName, 
    1: uPwd 
} 

甚至:

var credentials = { 
    '@0': uName, 
    '@1': uPwd 
} 

可能是一個數組

var credentials = [uName, uPwd] 

則:

var RS = DBConn.Execute(SQL,credentials); 
+0

感謝您的答覆。我試過了,但出現錯誤:沒有給出一個或多個必需參數的值。 –

+0

它是什麼數據庫模型 –

+0

其實我修改了我的回覆,嘗試一下。 –