我在更新语句的代码中遇到了语法错误,在阅读了多篇关于它的帖子后,我无法弄清楚导致错误的原因。
代码如下:
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 中测试了其输出。所有得出的结果都是预期的。
对上述代码中发生的情况的简短描述
- 用户在表单(带有下拉菜单(中更改客户,然后按保存(提交(。
- 在提交时,查询将启动,如果代码确实如此,则对其进行了测试。
- 所选客户保存在变量
New_customer
中。
与客户 - 名称匹配的关系号使用第一个选择语句进行检索。
- 正确的关系编号正在放入变量
Relationnumber_update
- 在第二个查询中,正在搜索正确的数字,该数字等于关系数字。
- 后面有一个 if/then 确保Relationnumber_update不等于 1000(不应对此数字进行更新(
- 如果它不等于 1000,则找到的订单号(第二个选择语句(存储在 var
ordernumber_update
更新 - 语句位于预订表中的订单字段使用找到的订单号进行更新的位置。
- 最后(在if之后(连接被关闭,页面正在"刷新"。
对于一些reasson,我在更新语句上收到语法错误,但我不知道为什么。我检查了订单表中"数字"字段、"关系"表中的"关系编号"和"预订"表中的"订单"字段的数据类型,它们的类型均为 number/int。
我还尝试直接在 update 语句中使用设置数字而不是 ordernumber_update var 进行更新(如下所示:sSQL3="UPDATE Bookings SET Order=6477 WHERE ID=" & request("ID")
(,但这会产生相同的错误。
三件事:
- 阅读有关 SQL 注入的信息
-
要调试 sql 语句"实时",请使用
sSQL3="UPDATE Bookings ... Response.Write(sSQL3) 'con.execute(sSQL3) -- comment it out
运行页面,并针对数据库测试结果 SQL 查询
-
如果 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],而不是单引号。并且不要对字段名称使用保留字。朱斯说'。