查询表达式中的语法错误(缺少运算符)

时间:2012-02-07 17:40:51

标签: asp-classic

我知道这是一个常见错误,但我仍然无法自己解决。 我想要做的是我有一个名为 status 的SELECT项目,允许用户选择他们的就业状态,我想简单地得到结果并更新user_table(访问文件)状态单元格。 任何回复将不胜感激!

守则如下:

<!--#include file="../conn/conn.asp"-->
<%
id=request.QueryString("id")
status=request.Form("status")
sql="select * from user_table where id="&id
set rs=conn.execute(sql)     
sql="update user_table set Status='"+status+"' where id="&id
'response.Write sql
conn.execute(sql)
conn.close
response.Write "<script>alert('Change Sucessful!');</script>"
set conn=nothing
response.end()
%>

2 个答案:

答案 0 :(得分:1)

我认为您可能遇到conn.execute(sql)以及response.end()

的问题

要解决此问题,您需要执行以下任一操作:

conn.execute sql

Call conn.execute(sql)

但是,是的,你应该遵循发布的其他评论,因为你的技术存在安全问题。您应该考虑将其更改为使用参数:

<!--#include file="../conn/conn.asp"-->
<%

id = request.QueryString("id")
status = request.Form("status")

sql = "select * from user_table where id = @id"
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = sql
Set cmd.ActiveConnection = conn
cmd.Prepared = True
cmd.Parameters.Refresh 
cmd.Parameters("@id") = id
Set rs = cmd.Execute
Set rs = nothing
Set cmd = nothing

sql = "update user_table set status = @status where id = @id"
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = sql
Set cmd.ActiveConnection = conn
cmd.Prepared = True
cmd.Parameters.Refresh 
cmd.Parameters("@status") = status
cmd.Parameters("@id") = id
Set rs = cmd.Execute
Set rs = nothing
Set cmd = nothing

response.Write "<script>alert('Change Sucessful!');</script>"
Set conn = nothing
response.end
%>

答案 1 :(得分:0)

我猜conn.asp让conn开放?否则你需要打开它。另外,当你取消注释response.write sql line时会显示什么?

而且,你肯定是在向黑客开放。你需要'清理'来自request.form或request.querystring的任何东西(至少是replace(..., "'", "''"),或者更好,使用存储过程而不是直接sql