提供程序错误'80020005'类型不匹配

时间:2015-06-20 20:04:43

标签: javascript sql sql-injection query-parameters web-development-server

我是刚刚开始学习网络开发的学生。对于我的任务,我获得了一个网站,我需要对SQL注入进行安全保护。我试图使用参数这样做,但我收到一个错误。

原始代码(如下)工作正常:

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;
  }

我试图以这种方式修改它:     function logInUser(name,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'没有给出一个或多个必需参数的值。

非常感谢ANy的帮助,非常感谢!

1 个答案:

答案 0 :(得分: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);