开发者

can't define id ColdFusion

here is my ColdFusion code:

Example1:

<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID 
FROM PRODUCT_CAT 
WHERE PRODUCT_CATID = PRODUCT_CATID
</cfquery>
#get_brand.product_catid#

But it shows all the time number 1, i just can't understand why, and how do i make it work properly, this code should have defined the brand_id, but instead shows 1. The system is Workcube.

Here is my example for getting from the static product's id, its dynamic price:

Example 2:

<cfset product_id = 630>
            <cfquery name="price_standart" datasource="#dsn3#">
            SELECT
                PRICE_STAN开发者_运维技巧DART.PRICE PRICE
            FROM
                PRICE_STANDART
            WHERE
                PRICE_STANDART.PRODUCT_ID = 
                <cfqueryparam value="#product_id#" cfsqltype="cf_sql_integer">
            </cfquery>

But this time i need to get from dynamic product's ID its dynamic brand id. This script works the same way as the Example 1:

<cfquery name="GET_BRAND" datasource="#dsn1#">
                        SELECT BRAND_ID 
                        FROM PRODUCT_BRANDS
                        WHERE BRAND_ID = BRAND_ID
                        </cfquery>
                        #get_brand.BRAND_ID#


As Andreas shows in his code, your query isn't going to work as written. The statement WHERE PRODUCT_CATID = PRODUCT_CATID doesn't actually pass a value - it would actually just be self-referential within the table values. In this case, it would return everything in the table.

You should instead have:

WHERE PRODUCT_CATID = #PRODUCT_CATID#

Where #PRODUCT_CATID# represents a variable. Better yet, use cfqueryparam as Andreas shows (this prevents SQL injection and improves query performance). However, I am not even sure that is what you intend since if you have the product ID why do you need to get it from the database? Instead, I assume you probably want to get the brands from the product in a particular category. Not knowing your table structure, it's hard to write that query for you but it might look something like:

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

Lastly, as both comments indicate, you would need to loop through the results to see all the records returned.


You need to wrap the statement in tags like this.

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


It's not very clear what your question really is about, but let me guess:

<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID 
FROM PRODUCT_CAT 
WHERE PRODUCT_CATID = <cfqueryparam cfsqltype="cf_sql_integer" value="#product_catid#">
</cfquery>

where #product_catid# refers to a variable you defined earlier in your code or received via form or url scope.

<cfloop query="GET_BRAND">
#get_brand.product_catid#<br />
</cfloop>

will show a list of all the product_catid's returned by the query.


It's not too clear what you are after here, but in the queries there are at least 2 problems. First your WHERE clause

WHERE PRODUCT_CATID = PRODUCT_CATID

is like saying

WHERE 1=1

This will return the full recordset. You can see this by adding

<cfdump var="#GET_BRAND#">

under your code to see the query output. I'm guessing this will show all records in the table.

To match just one record you need your WHERE clause to be like

WHERE PRODUCT_CATID = 3

or have the #...# wrapped around the variable you are trying to match to make it dynamic.

Secondly to the query result may be more than one record, and to see any more than the first record you need to loop over the output. One way is to use

<cfoutput query="GET_BRAND">
#BRAND_ID# <br>
</cfoutput>

My guess of what you are after is

<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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜