asp db получает "SELECT * FROM людей, ГДЕ id =" & Request.QueryString("id")

У меня есть код, написанный в файле ASP, который не работает

Set Conn = Server.CreateObject("ADODB.Connection")         
Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")
Dim strSQL  
Dim strSQL  
strSQL = "SELECT * FROM people WHERE id =" & Request.QueryString("id")
Set rs = Conn.Execute(strSQL)

Я получаю сообщение:

Ошибка ядра базы данных Microsoft JET '80040e14'

Синтаксическая ошибка (отсутствует оператор) в выражении запроса 'id ='.

/testAsp/test3/continue/person.asp, строка 26

Я так старался и до сих пор не понимаю, в чем проблема? (и да, я нуб в этой области)

пожалуйста помоги

PS Я могу получить конкретный идентификатор, введя номер вместо Request.QueryString("id")

3 ответа

Решение

Ваше поле идентификатора обычно будет искать числовое значение. Поэтому перед выполнением запроса к базе данных вы должны убедиться, что QueryString Request действительно содержит число. Вот что я делаю, и это также предотвратит инъекции sql. Создайте идентификатор переменной и присвойте ей значение строки запроса. Убедитесь, что значение идентификатора не пустое и фактически является числом "IsNumeric()". Тогда только в том случае, если оба они истинны, выполните поиск в базе данных. в северном направлении не забудьте закрыть свой набор записей и соединение и установить для них значение Nothing.

Dim ID
ID = Request.QueryString("id")
If ID <> "" And IsNumeric(ID) Then

    Set Conn = Server.CreateObject("ADODB.Connection")         
    Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")
    Dim strSQL 
    strSQL = "SELECT * FROM people WHERE id =" & ID
    Set rs = Conn.Execute(strSQL)

    ' DO YOUR BUSINESS '

    rs.Close()
    Set rs = Nothing
    Conn.Close()
    Set Conn = Nothing
Else
    If ID = "" Then
        Response.Write("ID is missing from the URL")
    ElseIf Not IsNumeric(ID) Then
        Response.Write("ID is NOT a number")
    End If
End If

Я считаю, что QueryString, если не приведено иное, будет по умолчанию строкой. основываясь на вашем запросе, вы не можете сказать, где id= строка, это должно быть id='string' или привести ваш параметр строки запроса к int.

Кроме того, как указано в комментариях, вы должны изучить параметризацию вашего запроса, поскольку вы открыты для внедрения SQL как есть.

Наиболее вероятная проблема заключается в том, что вы не обрабатываете пустое значение для вашего idQueryString значение. Попробуйте проверить id поле перед выполнением кода для чтения данных из базы данных.

Как отмечают другие, будьте осторожны с атаками SQL-инъекций. Всегда используйте параметры или, если вы хотите продолжить использовать встроенный SQL, подумайте:

id = Replace(Request.QueryString("id"), "'", "''")

-- РЕДАКТИРОВАТЬ --

Кроме того, согласно сообщению Барри Дауда, как в примере выше, больше для полей на основе символов и даты (и времени).

Другие вопросы по тегам