为这个冗长的问题道歉,我以为我会涵盖我尝试过的所有内容!
我有一个购物车应用程序,它将所选项目存储在一个数组中,然后将这些项目传递到 OrderItems 表以存储在数据库中。orderItems 表中的条目可以作为客户的分项订单页面输出,例如,如果他们想查看过去的订单。
我想遍历会话,并确定 session.itemid 属于哪个产品表,并在此基础上将属于正确 PK 列名称的 ID 插入 OrderItems 表。
例如 session.cart 的 CFDUMP:
上述每一项都属于一个单独的表。
订单项表
itemID int
orderID nvarchar(10)
ticketperformanceID int
ticketparkingID int
accommCategoryID int
itemCost decimal(6, 2)
如果购物车中只有一件商品,当前部分工作的代码可以正常执行,但是它将 itemid 存储在所有 3 列中,而不是与 ID 列名称匹配的列。此外,如果我有多个不同 ID 的项目,则会返回错误。请在下面的代码后查看错误代码。
<cfquery name="addOrder" datasource="sql1007539" result="insert">
INSERT INTO orders
(customerID
,orderDate
,orderValue)
values ('#cust.customerID#', '#DateFormat(Now())#','#variables.totalprice#')
</cfquery>
<cfquery name="orderItems" datasource="sql1007539">
insert into orderItems (
orderID,
ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
)
values('#insert.GENERATEDKEY#', '<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].price#<cfelse>#session.cart[i].price#, </cfif></cfloop></cfoutput>')</cfquery>
</cftransaction>
<cfoutput> Your order has been committed</cfoutput>
如果 session.cart 中有多个具有不同 ID 的项目,则会出错:
Error Executing Database Query.
[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '1, 2, 101' to data type int.
The error occurred in C:/ColdFusion10/cfusion/wwwroot/ce0932a/coursework/process.cfm: line 28
26 : )
27 :
28 : values('#insert.GENERATEDKEY#', '<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].itemid#<cfelse>#session.cart[i].itemid#, </cfif></cfloop></cfoutput>','<cfoutput><cfloop from="1" to="#arrayLen(session.cart)#" index="i"><cfif i eq arrayLen(session.cart)>#session.cart[i].price#<cfelse>#session.cart[i].price#, </cfif></cfloop></cfoutput>')</cfquery>
29 : </cftransaction>
30 :
VENDORERRORCODE 245
SQLSTATE 22018
SQL insert into orderItems ( orderID, ticketperformanceID ,ticketparkingID ,accommCategoryID ,itemCost ) values('81', '1, 2, 101','1, 2, 101','1, 2, 101','75.00, 20.00, 10.00')
DATASOURCE sql1007539
Resources:
尝试使用以下内容,如果有多个 item 则有效,但是它会填充具有相同 ID 的所有三个 ID 列,而且它只存储一个项目的 1 个条目而不是数量,即。我有两个,所以我想将这两个项目存储为单独的记录:
<cfloop from="1" to="#ArrayLen(SESSION.cart)#" index="i">
<cfquery name="orderItems" datasource="sql1007539">
insert into orderItems (
orderID,
ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
)
values('#insert.GENERATEDKEY#','#session.cart[i].itemid#', '#session.cart[i].itemid#', '#session.cart[i].itemid#', '#session.cart[i].price#'
)
</cfquery>
</cfloop>
<cfoutput> Your order has been committed</cfoutput>
产生错误的代码:
<cfloop from="1" to="#ArrayLen(SESSION.cart)#" index="i">
<cfquery datasource="sql1007539">
INSERT INTO orderItems(
orderID
,ticketperformanceID
,ticketparkingID
,accommCategoryID
,itemCost
where ticketperformanceID='#SESSION.cart[i].itemid#' and ticketparkingID='#SESSION.cart[i].itemid#' and accommCategoryID='#SESSION.cart[i].itemid#';)
VALUES('#insert.GENERATEDKEY#', '#SESSION.cart[i].itemid#', '#SESSION.cart[i].price#')
</cfquery>
</cfloop>
错误:
执行数据库查询时出错。[Macromedia][SQLServer JDBC 驱动程序][SQLServer]关键字“where”附近的语法不正确。
错误发生在 C:/ColdFusion10/cfusion/wwwroot/ce0932a/coursework/process2.cfm: 第 29 行
27:其中ticketperformanceID='#SESSION.cart[i].itemid#'和ticketparkingID='#SESSION.cart[i].itemid#'和accommCategoryID='#SESSION.cart[i].itemid#';)28 :
29:值('#insert.GENERATEDKEY#','#SESSION.cart[i].itemid#','#SESSION.cart[i].price#')30:31:
我对此束手无策,不知道从哪里开始......
将 Coldfusion 10 与 SQL 2008 R2 一起使用