asp db收到“SELECT * FROM people WHERE id =”&的Request.QueryString( “ID”)

时间:2014-07-15 14:12:01

标签: sql database vbscript asp-classic request.querystring

我的代码是用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行

我尝试了很多但仍然没有得到它的问题在哪里? (是的,我是这个领域的菜鸟)

请帮助

P.S。我可以通过输入num而不是Request.QueryString("id")

来接收特定ID

3 个答案:

答案 0 :(得分:1)

您的ID字段通常会查找数字值。因此,在执行数据库查询之前,您应该检查QueryString请求实际上是否包含数字。这是我做的,它也会阻止sql注入。 创建变量ID并为其分配查询字符串的值。 检查ID值是否为空并且实际上是一个数字“IsNumeric()”然后只有当这两个都为真时才执行数据库查找。 NB。不要忘记关闭记录集和连接,并将它们设置为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

答案 1 :(得分:0)

我相信QueryString,除非另有说明,否则默认为字符串。根据您的查询,您不能说id = string,它必须是id =&#39; string&#39;,或者将您的查询字符串param转换为int。

此外,正如在注释中所提到的那样,您应该查看参数化查询,因为您可以按原样打开SQL注入。

答案 2 :(得分:0)

此处最可能的问题是您没有为id QueryString值处理空值。在执行代码之前,请尝试检查id字段以从数据库中读取数据。

正如其他人所指出的,要小心SQL注入攻击。始终使用参数,或者如果您希望继续使用内联SQL,请考虑:

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

- 编辑 -

另外,根据Barry Dowd的帖子,上面的例子更多的是基于字符和日期(和时间)字段。