更新语句 ASP 经典中的语法错误



我在更新语句的代码中遇到了语法错误,在阅读了多篇关于它的帖子后,我无法弄清楚导致错误的原因。

代码如下:

if request.querystring("do")="customer" then
    New_customer = request.Form("customer")
    openconn con
    sSQL="SELECT RelationNumber FROM Relations WHERE RelationName='" & New_customer & "'"
    set rst = con.execute(sSQL)
        if rst.EOF then 
            response.write "No relation found"
        else
            Relationnumber_update = rst("RelationNumber")
            sSQL2="SELECT Number FROM Orders WHERE Relation=" & Relationnumber_update & ""          
            set rst2 = con.execute(sSQL2)
                if rst2.EOF then                        
                    response.write("No order number found!")
                else
                    if Relationnumber_update <> 1000 then
                        Ordernumber_update = rst2("Nummer")
                        sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")
                        con.execute(sSQL3)
                    else
                        response.write("Order number 1000 is not allowed!")
                    end if
                end if
        end if
    closeconn con
    response.redirect("myPage.asp?action=page")
    response.end
end if

错误发生在以下行:sSQL3="UPDATE Bookings SET Order=" & Ordernumber_update & " WHERE ID=" & request("ID")

须知事项:

  • 请求查询来自用户可以在下拉列表中选择客户的表单。请参阅代码:<form name="ChangeCustomer" method="post" action="myPage.asp?action=page&do=customer&ID=<%=rst("ID")%>" style="display:inline">
  • 来自 ID 的 rst 来自一个 select 语句,该语句之前有效,因为我也以相同的方式在其他代码中使用(确实有效(。
  • openconn con 是一个用于访问我的数据库的功能(它有效,原因与上面相同(
  • 此代码中的每个 select 语句已在 response.write 中测试了其输出。所有得出的结果都是预期的。

对上述代码中发生的情况的简短描述

  1. 用户在表单(带有下拉菜单(中更改客户,然后按保存(提交(。
  2. 在提交时,查询将启动,如果代码确实如此,则对其进行了测试。
  3. 所选客户保存在变量New_customer中。
  4. 与客户
  5. 名称匹配的关系号使用第一个选择语句进行检索。
  6. 正确的关系编号正在放入变量Relationnumber_update
  7. 在第二个查询中,正在搜索正确的数字,该数字等于关系数字。
  8. 后面有一个 if/then 确保Relationnumber_update不等于 1000(不应对此数字进行更新(
  9. 如果它不等于 1000,则找到的订单号(第二个选择语句(存储在 var ordernumber_update
  10. 更新
  11. 语句位于预订表中的订单字段使用找到的订单号进行更新的位置。
  12. 最后(在if之后(连接被关闭,页面正在"刷新"。

对于一些reasson,我在更新语句上收到语法错误,但我不知道为什么。我检查了订单表中"数字"字段、"关系"表中的"关系编号"和"预订"表中的"订单"字段的数据类型,它们的类型均为 number/int。

我还尝试直接在 update 语句中使用设置数字而不是 ordernumber_update var 进行更新(如下所示:sSQL3="UPDATE Bookings SET Order=6477 WHERE ID=" & request("ID") (,但这会产生相同的错误。

三件事:

  1. 阅读有关 SQL 注入的信息
  2. 要调试 sql 语句"实时",请使用

    sSQL3="UPDATE Bookings ...
    Response.Write(sSQL3)
    'con.execute(sSQL3) -- comment it out
    

    运行页面,并针对数据库测试结果 SQL 查询

  3. 如果 ID 具有字符串数据类型(char、varchar 等(,则应使用"..."引用其值

附言

使用 [Order] 处理保留字。

注意数据库管理系统的保留字。这里你使用的是Order,这是一个保留的。

因此,如果您使用 MySQL,请使用它:

sSQL3="UPDATE Bookings SET `Order`=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"

或者在 SQL Server 的情况下:

sSQL3="UPDATE Bookings SET [Order]=" & Ordernumber_update & " WHERE ID=" & request("ID") &";"

希望这也对其他人有所帮助。谢谢。

使用括号 aound [Order],而不是单引号。并且不要对字段名称使用保留字。朱斯说'。

最新更新