‹cfqueryparam› показывает ? вместо числа

вот мой код для холодного сплава:

    SELECT
        MIN(legacy_sale_id) AS legacy_sale_id ,
        cc_id                   ,  
        сс_name                 ,
        sales_rep_name                        ,
        original_sale_id                      ,
        ls.id           ,
        <cfif ARGUMENTS.is_export neq 0>
            CASE site_id 
              WHEN 4 THEN 'EU' 
            END as site_id, 
        <cfelse>
        site_id                               ,
        </cfif>
        gp_order                              ,
        SUM(item_price_usd      * qty) AS value_usd,
        SUM(item_price_original * qty) AS value_original,
        co.total_sales_orders
    FROM
        ls
    LEFT JOIN  cc
     ON
        cc.company_id = ls.id
    LEFT JOIN
        (
            SELECT
                 company_id,
                COUNT(ll.id) AS total_sales_orders
            FROM
                ls ll
            WHERE
                cc_id IS NOT NULL
            AND site_id IN (1,4)  
            GROUP BY
                cc_id
        ) co
    ON
        co.company_id = ls.cc_id
    WHERE
        cc.deleted_timestamp IS NULL
    <cfif ARGUMENTS.p_sales_order EQ "">
        <cfif ARGUMENTS.p_date_type EQ "0">
            AND when_created BETWEEN '#ARGUMENTS.p_date_from# 00:00:00' AND '#ARGUMENTS.p_date_to# 23:59:59'
        <cfelse>
            AND when_shipped BETWEEN '#ARGUMENTS.p_date_from# 00:00:00' AND '#ARGUMENTS.p_date_to# 23:59:59'
        </cfif>
    </cfif>
    AND 
        site_id IN (#Replace("'" & ARGUMENTS.p_sites & "'", ",", "','", "ALL")#)
    AND 
        ls.sage_roles_user_id IN (#Replace("'" & ARGUMENTS.p_user_id & "'", ",", "','", "ALL")#)
    <cfif lst_exclude NEQ "">
        AND
         (
              cc_id IS NULL
            OR cc_id NOT IN (#Replace("'" & lst_exclude & "'", ",", "','", "ALL")#)
            )
    </cfif> 

    <cfif lst_custnmbr NEQ "">
        AND
            (
                gp_custnmbr IS NULL
             OR gp_custnmbr NOT IN (#Replace("'" & lst_custnmbr & "'", ",", "','", "ALL")#)
            )
    </cfif>
   <cfif ARGUMENTS.p_customer_name NEQ "">
    AND ls.сс_name LIKE <cfqueryparam value="%#ARGUMENTS.p_customer_name#%" cfsqltype="cf_sql_varchar">
   </cfif> 
   <cfif ARGUMENTS.p_sales_order NEQ "">
    AND ls.gp_order = <cfqueryparam value="#ARGUMENTS.p_sales_order#" cfsqltype="cf_sql_integer">
   </cfif>

       <cfif IsDefined('ARGUMENTS.p_country') AND ARGUMENTS.p_country NEQ "">
        AND ls.country_id = <cfqueryparam value="#ARGUMENTS.p_country#" cfsqltype="cf_sql_integer">
       </cfif>

    GROUP BY
        сс_name,
        sales_rep_name       ,
        ls.id,
        original_sale_id     ,
        site_id              ,
        gp_order,
        cc_id,
        total_sales_orders

sql, сгенерированный этим кодом coldfusion, следующий:

SELECT
    *
FROM
    ls
SELECT
    MIN(legacy_sale_id) AS legacy_sale_id ,
    cc_id ,
    сс_name ,
    sales_rep_name ,
    original_sale_id ,
    ls.id ,
    CASE site_id
        WHEN 4
        THEN 'EU'
    END AS site_id,
    gp_order ,
    SUM(item_price_usd * qty)      AS value_usd,
    SUM(item_price_original * qty) AS value_original,
    co.total_sales_orders
FROM
    ls
LEFT JOIN
     cc
ON
    cc.company_id = ls.id
LEFT JOIN
    (
        SELECT
            cc_id      AS company_id,
            COUNT(ll.id) AS total_sales_orders
        FROM
            ls ll
        WHERE
            cc_id IS NOT NULL
        AND site_id IN (1,4)
        GROUP BY
            cc_id ) co
ON
    co.company_id = ls.cc_id
WHERE
    cc.deleted_timestamp IS NULL
AND when_created BETWEEN '07/28/2015 00:00:00' AND '07/29/2015 23:59:59'
AND site_id IN ('1',
                '4')
AND ls.sage_roles_user_id IN ('33333',
                                       '111111',
                                       '222222',
                                       )
AND (
        cc_id IS NULL
    OR  cc_id NOT IN ('000000',
                                    '111111',
                                    '222222',
                                    ) )
AND ls.country_id = ?
GROUP BY
    сс_name,
    sales_rep_name ,
    ls.id,
    original_sale_id ,
    site_id ,
    gp_order,
    cc_id,
    total_sales_orders

Я не могу понять, почему cfqueryparam возвращает "?" вместо числа: "ls.country_id =?" p.s. спс за внимание проблема решена


person acesta    schedule 29.07.2015    source источник
comment
Вы используете cfdump правильно? все значения ? находятся в параметрах cfdump   -  person Guilherme Silva    schedule 29.07.2015
comment
Я использую cfquery.sql, а затем cfdump   -  person acesta    schedule 29.07.2015
comment
Ничего общего с вашим вопросом, но не используйте между для такого сравнения дат. Технически он может не охватывать весь диапазон баз данных, хранящих миллисекунды. Более элегантным и точным вариантом является конструкция where col >= {beginDateAtMidnight} and col < {dayAfterEndDateAtMidnight}   -  person Leigh    schedule 29.07.2015
comment
Технически он может не охватывать весь диапазон для баз данных, в которых хранятся миллисекунды Скрипт SQL   -  person Leigh    schedule 30.07.2015


Ответы (1)


Потому что, когда вы используете <cfqueryparam>, вы указываете CF передать значение в качестве параметра, а не жестко кодировать его в строке SQL. В этом вся его цель!

Позиционирование тега <cfqueryparam> в операторе SQL предназначено исключительно для обозначения того, куда должен идти заполнитель для значения (?). Затем SQL-сервер знает, что параметры, которые он передал заполнителям в операторе SQL, соответствуют параметрам, когда дело доходит до выполнения запроса.

person Adam Cameron    schedule 29.07.2015