Использование ASP и INSERT INTO -

Я пытаюсь создать простую страницу, которая вводит данные в базу данных, и мой код ниже.

<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<!--#include FILE=dbcano.inc-->
<%

dim username,password,f_name,l_name,objConn,objs,query

username   = Request.Form("user")
password   = Request.Form("pass")
f_name     = Request.Form("fname")
l_name     = Request.Form("lname")

if((f_name <> null) or (f_name <> "")) then
    response.redirect("patti_account.asp")
else
    Set objConn = ConnectDB()
    query       = "INSERT INTO user (username,password,f_name,l_name) VALUES ('"& username &"','"& password &"','"& f_name &"','"& l_name &"')"
    Set objs    = objConn.Execute(query)

    Response.Redirect ("thankyou.asp")

end if

%>

Я получаю эту ошибку при запуске моей страницы:

Поставщик Microsoft OLE DB для SQL Server, ошибка «80040e14»

Неверный синтаксис рядом с ключевым словом «пользователь».

create_account.asp, строка 18

Я проверил все, мои имена полей существуют, и мое имя таблицы также является правильным.

Какие-либо предложения?

10.12.2008 20:32:10
Ваш код завален SQL-инъекцией, подумайте, что произойдет, когда я введу свое имя как: '; DROP TABLE user;
TravisO 10.12.2008 20:38:58
TravisO - Если я проверю свой код даже на стороне клиента и на стороне сервера?
Coughlin 10.12.2008 20:43:08
... вид кода, который дает кошмары DBA.
Joel Coehoorn 10.12.2008 21:21:55
3 ОТВЕТА
РЕШЕНИЕ

Пользователь - зарезервированное слово в SQL-сервере. Поместите его в квадратные скобки, например, [пользователь] .

3
10.12.2008 20:36:13
Работал как шарм! Спасибо Мартин. Я даже не думал проверить, было ли слово «пользователь» зарезервированным словом
Coughlin 11.12.2008 22:18:59

Попробуйте изменить это на:

query       = "INSERT INTO [user] (username,password,f_name,l_name) VALUES ('"& username &"','"& password &"','"& f_name &"','"& l_name &"')"

(экранируйте имя таблицы, так как это зарезервированное слово)

Кроме того, не забудьте проверить ввод с клавиатуры, так как этот код подвергается атакам SQL-инъекций.

1
10.12.2008 20:38:14

Это уязвимо для SQL-инъекций. Представьте, что произойдет, если кто-то вставит это в фамилию:

');DROP Table [user];--

Исправьте это, или я лично выследю вас и буду избивать вас влажной лапшой, пока вы этого не сделаете.

2
10.12.2008 21:08:43
+1 за взбивание влажной лапши; Хороший момент и по поводу инъекций :)
seanb 10.12.2008 21:31:02
Спасибо, Джоэл! Я буду следить за этим .. спасибо еще раз. Райан
Coughlin 11.12.2008 22:18:27