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 как есть.
Наиболее вероятная проблема заключается в том, что вы не обрабатываете пустое значение для вашего id
QueryString
значение. Попробуйте проверить id
поле перед выполнением кода для чтения данных из базы данных.
Как отмечают другие, будьте осторожны с атаками SQL-инъекций. Всегда используйте параметры или, если вы хотите продолжить использовать встроенный SQL, подумайте:
id = Replace(Request.QueryString("id"), "'", "''")
-- РЕДАКТИРОВАТЬ --
Кроме того, согласно сообщению Барри Дауда, как в примере выше, больше для полей на основе символов и даты (и времени).