无法定义id ColdFusion

时间:2011-01-11 14:03:57

标签: coldfusion

这是我的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#

4 个答案:

答案 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>