Я бы предложил разбить ваш код следующим образом, чтобы он стал читабельным и понятным:
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-инъекции и безопасности
Как уже упоминал кто-то другой, ваш код очень восприимчив к атакам 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()
Примечание: обязательно загрузите и включите ADOVBS.INC , чтобы вам не приходилось заменять константы adVarChar
и adParamInput
и т. Д. Их числовыми эквивалентами.
Для получения дополнительной информации см. этот SO-ответ Хосе Базилио , Google на «SQL Injection ASP» или «SQL Prepared Statement Classic ASP», он должен найти вас.