我正在使用它在我的表中插入一些东西,它不断给我这个错误:
Microsoft VBScript compilation error '800a03ee' Expected ')' /thanks.asp, line 63 Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode) VALUES ('"Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash")"')) ---------------------------------------------------------------------------------------------------------------------^
这是我正在使用的代码:
Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode) VALUES ('"Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash")"'))
有人可以帮帮我吗?
谢谢
答案 0 :(得分:3)
我建议按如下方式分解你的代码,这样它就变得易读和可理解了:
Dim execSql
execSql = "insert into SALT (Email, Username, FirstName, LastName, ActivationCode)"
execSql = execSql & " VALUES ('"
execSql = execSql & Request.QueryString("payer_email")
execSql = execSql & "', '"
execSql = execSql & Request.QueryString("payer_email")
execSql = execSql & "', '"
execSql = execSql & Request.QueryString("first_name")
execSql = execSql & "', '"
execSql = execSql & Request.QueryString("last_name")
execSql = execSql & "', '"
execSql = execSql & Request.QueryString("hash")
execSql = execSql & "')"
Set rstSimple = cnnSimple.Execute(execSql)
输入时,我删除了你的字符串的引用错误。现在,如果收到新错误,它们会变得更加明显。此外,代码的着色使其可读且易于发现错误(取决于您使用的编辑器)。
正如其他人已经提到的,您的代码非常容易受到SQL注入攻击。即使没有攻击(即丢弃数据库),如果有人被命名为d'Amour
(法语)或in 't Huys
(荷兰语),它将会失败,从而导致页面崩溃。要避免这种情况,请不要尝试过滤代码,而是使用SQL命令和参数重写代码。这很简单,你的代码就变成了这个:
Set dbCommand = Server.CreateObject("ADODB.Command")
Set dbCommand.ActiveConnection = cnnSimple
dbCommand.CommandType = adCmdText
dbCommand.CommandText = _
"INSERT INTO SALT (Email, Username, FirstName, LastName, ActivationCode) " + _
"VALUES (@email, @user, @firstname, @lastname, @code)"
With dbCommand.Parameters
.Add("email", adVarChar, adParamInput, , Request.QueryString("payer_email"))
.Add("user", adVarChar, adParamInput, , Request.QueryString("payer_email"))
.Add("firstname", adVarChar, adParamInput, , Request.QueryString("first_name"))
.Add("lastname", adVarChar, adParamInput, , Request.QueryString("last_name"))
.Add("code", adVarChar, adParamInput, , Request.QueryString("hash"))
End With
Set rstSimple = dbCommand.Execute()
注意:请务必download and include ADOVBS.INC,这样您就不必将常量adVarChar
和adParamInput
替换为等效数字。
有关详细信息,请参阅this SO answer by Jose Basilio,Google上的“SQL注入ASP”或“SQL Prepared Statement Classic ASP”,它应该会找到一些点击。
答案 1 :(得分:0)
您在这里缺少&
:
VALUES ('"Request.QueryString("payer_email") & "'
应该是:
VALUES ('" & Request.QueryString("payer_email") & "'
即使在声明的最后部分,您仍然缺少&
而丢失了"
:
Request.QueryString("hash")"'))
应该是:
Request.QueryString("hash") & "')")
因此,您可能需要尝试以下语句:
cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode) VALUES ('" & Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash") & "')")
答案 2 :(得分:0)
似乎存在与括号相关的语法错误。 该行末尾的2个括号看起来很可疑。
答案 3 :(得分:0)
缺少的&符号和引号可能是您遇到的最少问题。
看起来你不是以任何方式清理琴弦。字符串可以包含未转义的单引号。您可以使用SQL注入,因为您没有使用参数。