这是我的ColdFusion代码:
例1:
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID
FROM PRODUCT_CAT
WHERE PRODUCT_CATID = PRODUCT_CATID
</cfquery>
#get_brand.product_catid#
但它显示所有时间编号1,我只是无法理解为什么,以及如何使其正常工作,此代码应该已定义brand_id,而是显示1。 该系统是Workcube。
以下是我从静态产品ID中获取动态价格的示例:
示例2:
<cfset product_id = 630>
<cfquery name="price_standart" datasource="#dsn3#">
SELECT
PRICE_STANDART.PRICE PRICE
FROM
PRICE_STANDART
WHERE
PRICE_STANDART.PRODUCT_ID =
<cfqueryparam value="#product_id#" cfsqltype="cf_sql_integer">
</cfquery>
但是这次我需要从动态产品的ID中获得动态品牌ID。 此脚本的工作方式与示例1相同:
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT BRAND_ID
FROM PRODUCT_BRANDS
WHERE BRAND_ID = BRAND_ID
</cfquery>
#get_brand.BRAND_ID#
答案 0 :(得分:4)
正如Andreas在他的代码中所显示的那样,你的查询不会按照书面形式工作。语句WHERE PRODUCT_CATID = PRODUCT_CATID实际上并没有传递一个值 - 它实际上只是在表值中自引用。在这种情况下,它将返回表中的所有内容。
你应该改为:
WHERE PRODUCT_CATID = #PRODUCT_CATID#
#PRODUCT_CATID#表示变量。更好的是,使用cfqueryparam作为Andreas显示(这可以防止SQL注入并提高查询性能)。但是,我甚至不确定这是否是您的意图,因为如果您有产品ID,为什么需要从数据库中获取它?相反,我假设您可能希望从特定类别的产品中获取品牌。不知道你的表结构,很难为你编写这个查询,但它可能看起来像:
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT.BRAND_ID
FROM PRODUCT
INNER JOIN PRODUCT_CAT
ON PRODUCT.PRODUCT_CATID = PRODUCT_CAT.PRODUCT_CATID
WHERE PRODUCT_CATID = <cfqueryparam cfsqltype="cf_sql_integer" value="#product_catid#">
</cfquery>
最后,正如两条评论所指出的那样,您需要遍历结果以查看返回的所有记录。
答案 1 :(得分:0)
您需要将语句包装在这样的标签中。
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID FROM PRODUCT_CAT WHERE PRODUCT_CATID = PRODUCT_CATID
</cfquery>
<cfoutput query =GET_Brand">
#get_brand.product_catid#
</cfoutput>
答案 2 :(得分:0)
目前还不是很明确你的问题是什么,但让我猜一下:
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID
FROM PRODUCT_CAT
WHERE PRODUCT_CATID = <cfqueryparam cfsqltype="cf_sql_integer" value="#product_catid#">
</cfquery>
其中#product_catid#
是指您之前在代码中定义或通过表单或网址范围接收的变量。
<cfloop query="GET_BRAND">
#get_brand.product_catid#<br />
</cfloop>
将显示查询返回的所有product_catid的列表。
答案 3 :(得分:0)
现在不太清楚你在这里是什么,但在查询中至少有两个问题。首先是你的WHERE子句
WHERE PRODUCT_CATID = PRODUCT_CATID
就像说
WHERE 1=1
这将返回完整的记录集。你可以通过添加
来看到这一点 <cfdump var="#GET_BRAND#">
在您的代码下查看查询输出。我猜这将显示表中的所有记录。
要匹配一条记录,您需要将WHERE子句设置为
WHERE PRODUCT_CATID = 3
或让#...#缠绕你想要匹配的变量,使其变得动态。
其次,查询结果可能是多个记录,并且要查看除了第一个记录之外需要循环输出的内容。一种方法是使用
<cfoutput query="GET_BRAND">
#BRAND_ID# <br>
</cfoutput>
我猜你所追求的是
<cfset ID_TO_MATCH=3>
<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT BRAND_ID
FROM PRODUCT_CAT
WHERE PRODUCT_CATID = #ID_TO_MATCH#
</cfquery>
<cfoutput query="GET_BRAND">
#BRAND_ID# <br>
</cfoutput>