Вы видели эту странную ошибку QoQ [ColdFusion]?

Я подтвердил, что первый запрос работает должным образом

<cfquery name="validation_info" dbtype="query">
    select      shipViaName,TOTALSHIPRATE
    from        s_c_c.qShipCalc
    WHERE       sku in (#preserveSingleQuotes(validate)#)
</cfquery>
<cfquery name="validation_info2" dbtype="query">
    select      TOTALSHIPRATE
    from        validation_info
    WHERE       shipViaName = "FedEx 3 Day"
</cfquery>

Но на второй запрос я получаю эту ошибку:

Обнаружено "shipViaName. Неверное условное выражение, Неверное условное выражение, Лексическая ошибка в строке 0, столбце 0. Обнаружено: "\"" (34), после: ""

Он говорит, что ошибка происходит в этой строке:

<cfquery name="validation_info2" dbtype="query">

Я также получал эту ошибку, когда два запроса были объединены в один.

Обновление из комментариев:

Дамп запроса validation_info:

SHIPVIANAME TOTALSHIPRATE

1 | FedEx Ground | 11.9  ||
2 | FedEx 3 Day  | 22.99 || 
3 | FedEx 2 Day  | 26.99 || 
4 | FedEx 1 Day  | 44.55 || 
5 | FedEx Ground | 0     || 
6 | FedEx 3 Day  | 23.63 || 
7 | FedEx 2 Day  | 26.71 || 
8 | FedEx 1 Day  | 41.9  ||

person Travis Heeter    schedule 23.10.2012    source источник
comment
У вас есть образец того, что находится на валидации? А образец того, что есть в validation_info?   -  person Blaise Swanwick    schedule 23.10.2012
comment
Вы пробовали одинарные кавычки во втором запросе? Кроме того, я бы рекомендовал использовать cfqueryparam в QoQ. Поскольку ваш первый запрос использует список значений, добавьте атрибут list, т.е. WHERE SKU IN ( <cfqueryparam value="#validate#" cfsqltype="cf_sql_varchar" list="true">) .   -  person Leigh    schedule 23.10.2012
comment
validation_info SHIPVIANAME TOTALSHIPRATE 1 | FedEx Ground | 11,9 || 2 | FedEx 3 дня | 22,99 || 3 | FedEx 2 дня | 26,99 || 4 | FedEx 1 день | 44,55 || 5 | FedEx Ground | 0 || 6 | FedEx 3 дня |23,63 || 7 | FedEx 2 дня | 26,71 || 8 | FedEx 1 день | 41,9 ||   -  person Travis Heeter    schedule 23.10.2012
comment
СВЯТАЯ С#*@! Одинарные кавычки сработали! ВТФ?!   -  person Travis Heeter    schedule 23.10.2012
comment
(Изменить) Обычно соглашение jdbc заключается в использовании одинарных (не двойных) кавычек. Но использование cfqueryparam вместо того, чтобы возиться с кавычками, вообще позволяет избежать всех проблем. Он обрабатывает все для вас.   -  person Leigh    schedule 23.10.2012
comment
@Leigh Можете ли вы опубликовать это как ответ, чтобы я мог отдать вам должное? Кроме того, по какой-то причине cfqueryparam не работал, я использовал его миллион раз, поэтому я не знаю, что происходит, вероятно, какая-то странная проблема с областью действия, но именно поэтому я не использовал cfqueryparam, и я был слишком под прицелом, чтобы понять это.   -  person Travis Heeter    schedule 27.10.2012
comment
@TravisHeeter - признателен, но не стесняйтесь принимать ответ KRC, поскольку мы оба пришли к одному и тому же выводу примерно в одно и то же время :) Просто рад, что вы разобрались с проблемой.   -  person Leigh    schedule 27.10.2012


Ответы (2)


Вам нужно использовать одинарные кавычки вместо двойных кавычек для вашей строки во втором запросе SQL.

person K_Cruz    schedule 23.10.2012
comment
Конечно, я пропустил это предложение в комментариях к посту. - person K_Cruz; 23.10.2012
comment
Ха-ха, не беспокойтесь. Если бы я хотел, чтобы это был ответ, я бы ответил :) - person Leigh; 23.10.2012

Я бы рекомендовал использовать cfqueryparam для ваших переменных, попробуйте это

<cfquery name="validation_info" dbtype="query">
    SELECT      
        shipViaName,
        TOTALSHIPRATE
    FROM        
        s_c_c.qShipCalc
    WHERE       
        sku IN (<cfqueryparam value="#validate#" cfsqltype="CF_SQL_INTEGER" list="yes" /> )
</cfquery>
person John    schedule 23.10.2012
comment
надеюсь, saveSingleQuotes не возвращает список PreserveSingleQuotes запрещает CF автоматически защищать запрос, удваивая одинарные кавычки. Таким образом, использование cfqueryparam определенно является правильным решением. Даже с QoQ. - person Leigh; 23.10.2012
comment
@Leigh Ли, я не знал, что это функция, встроенная в CF. - person John; 23.10.2012
comment
Ага. Но он больше не используется, потому что представляет риск внедрения sql в запросы database. - person Leigh; 23.10.2012