我的代码是用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")
答案 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的帖子,上面的例子更多的是基于字符和日期(和时间)字段。