我在弄清楚如何编写经典的ASP查询以防止SQL注入时遇到麻烦。
我已经阅读了一些帖子,并提出了以下脚本;
set cmd = server.createobject("ADODB.Command")
SQL = "Select * From tablename Where Email Like ? And Deleted=0"
cmd.ActiveConnection = conn
cmd.CommandText = qText
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900
cmd.Parameters.Append cmd.CreateParameter("@name", adVarchar, adParamInput, 50, "%" & this.Form("email") & "%")
Set rs = cmd.Execute
尽管我每次运行它,都会遇到以下错误;
ADODB.Command error '800a0bb9'
Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
的指示进行操作
任何帮助弄清这一点的人将不胜感激。
答案 0 :(得分:1)
adVarchar
,adCmdText
和adParamInput
是常量值,需要先定义它们才能使用。您可以通过多种方式进行此操作:
仅定义您手动需要的常量:
const adVarChar = 200
const adParamInput = &H0001
const adCmdText = &H0001
直接使用这些值(可读性/主表性较低,通常不建议这样做):
cmd.Parameters.Append cmd.CreateParameter("@name", 200, &H0001, 50, "%" & this.Form("email") & "%")
在方便的包含文件中包含一个adovbs.inc
来定义所有ADO常量:
<!--#include virtual="/adovbs.inc"-->
adovbs.inc文件本身可在网络上的许多地方下载(请确保对其进行快速扫描以检查其中是否包含讨厌的东西),4GuysFromRolla site是受欢迎的文件(下载链接的.txt
,并将其重命名为.inc
)
包括一个reference to the ADO TypeLib:
<!--metadata type="TypeLib" name="Microsoft ActiveX Data Objects 2.8 Library" uuid="{2A75196C-D9EB-4129-B803-931327F72D5C}" version="2.8"-->